在 Java 中,将字符串的首字母大写,同时保持其余字母小写,可以通过多种方式实现,以下是几种常见的方法,从最推荐到其他备选方案。

使用 String.substring() 和 String.toUpperCase() / toLowerCase() (最常用)
这是最直接、最易读的方法,适用于大多数情况。
核心思路:
- 获取字符串的第一个字符,并将其转换为大写。
- 获取字符串的剩余部分(从第二个字符开始),并将其转换为小写。
- 将这两部分拼接起来。
代码示例:
public class StringUtils {
public static String capitalize(String str) {
// 处理 null 或空字符串的情况
if (str == null || str.isEmpty()) {
return str;
}
// 获取首字母并转为大写
String firstLetter = str.substring(0, 1).toUpperCase();
// 获取剩余部分并转为小写
String remainingLetters = str.substring(1).toLowerCase();
// 拼接
return firstLetter + remainingLetters;
}
public static void main(String[] args) {
String s1 = "hello world";
System.out.println(capitalize(s1)); // 输出: Hello world
String s2 = "jAVA pROGRAMMING";
System.out.println(capitalize(s2)); // 输出: Java programming
String s3 = "a";
System.out.println(capitalize(s3)); // 输出: A
String s4 = "";
System.out.println(capitalize(s4)); // 输出: (空字符串)
String s5 = null;
System.out.println(capitalize(s5)); // 输出: null
}
}
优点:

- 简单直观,易于理解。
- 不需要引入任何外部库。
缺点:
- 对于性能要求极高的场景,连续创建多个
String对象可能会产生轻微的性能开销(因为String在 Java 中是不可变的)。
使用 StringBuilder (性能更优)
如果这个操作会在循环中被大量执行,使用 StringBuilder 可以提高性能,因为它在内存中构建字符串,避免了多次创建中间字符串对象。
核心思路:
与方法一类似,但使用 StringBuilder 来进行拼接。
代码示例:

public class StringUtils {
public static String capitalizeWithBuilder(String str) {
if (str == null || str.isEmpty()) {
return str;
}
StringBuilder sb = new StringBuilder(str.length());
sb.append(Character.toUpperCase(str.charAt(0)));
sb.append(str.substring(1).toLowerCase());
return sb.toString();
}
public static void main(String[] args) {
String s1 = "hello world";
System.out.println(capitalizeWithBuilder(s1)); // 输出: Hello world
String s2 = "jAVA pROGRAMMING";
System.out.println(capitalizeWithBuilder(s2)); // 输出: Java programming
}
}
优点:
- 性能更好,特别是在循环或处理大量数据时。
- 内存效率更高。
缺点:
- 代码比方法一略显冗长。
使用 Apache Commons Lang (推荐用于生产环境)
在真实的项目开发中,推荐使用成熟的、经过充分测试的工具库,Apache Commons Lang,它提供了许多实用的字符串操作方法。
你需要添加 Maven 依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version> <!-- 请使用最新版本 -->
</dependency>
使用 WordUtils 类:
代码示例:
import org.apache.commons.lang3.text.WordUtils;
public class CommonsLangExample {
public static void main(String[] args) {
String s1 = "hello world";
// capitalizeFully() 会将每个单词的首字母大写,其余小写
String result1 = WordUtils.capitalizeFully(s1);
System.out.println(result1); // 输出: Hello World
String s2 = "jAVA pROGRAMMING";
String result2 = WordUtils.capitalizeFully(s2);
System.out.println(result2); // 输出: Java Programming
// 如果只想首字母大写,可以使用 capitalize()
String s3 = "hello world";
String result3 = WordUtils.capitalize(s3);
System.out.println(result3); // 输出: Hello world
}
}
优点:
- 功能强大:
capitalizeFully()不仅处理首字母,还能处理每个单词的首字母。 - 健壮性:库中的代码经过了大量测试,处理了各种边界情况(如
null、空格等)。 - 代码简洁:一行代码就能完成复杂操作,提高开发效率。
缺点:
- 需要引入外部依赖。
总结与推荐
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
String.substring() |
简单、直观、无依赖 | 性能略逊于 StringBuilder |
学习、简单脚本、快速原型。 |
StringBuilder |
性能最好、内存高效 | 代码稍显冗长 | 对性能有高要求的循环或大数据处理。 |
| Apache Commons Lang | 功能强大、健壮、代码简洁 | 需要引入外部依赖 | 生产环境、企业级项目开发的首选。 |
对于绝大多数 Java
- 如果只是简单处理,或者在学习/面试中,使用 方法一 (
String.substring()) 是最合适的。 - 如果是在正式的项目中,并且需要处理复杂的字符串逻辑,强烈建议使用 方法三 (Apache Commons Lang),它能让你更专注于业务逻辑本身,而不是底层的工具函数实现。
