在 Java 中,获取字符串长度的核心方法是 String.length()。

核心方法:length()
length() 是 String 类的一个实例方法,用于返回该字符串中的字符数量(char count)。
语法
public int length()
- 返回值:一个整数,表示字符串的长度。
- 注意:
length()是一个方法,需要加上括号 来调用,不像数组那样使用属性length。
示例代码
public class StringLengthExample {
public static void main(String[] args) {
String str1 = "Hello, World!";
String str2 = "Java";
String str3 = ""; // 空字符串
String str4 = " "; // 只有空格的字符串
// 使用 length() 方法获取字符串长度
int length1 = str1.length();
int length2 = str2.length();
int length3 = str3.length();
int length4 = str4.length();
System.out.println("字符串 \"" + str1 + "\" 的长度是: " + length1); // 输出: 13
System.out.println("字符串 \"" + str2 + "\" 的长度是: " + length2); // 输出: 4
System.out.println("字符串 \"" + str3 + "\" 的长度是: " + length3); // 输出: 0
System.out.println("字符串 \"" + str4 + "\" 的长度是: " + length4); // 输出: 3
}
}
重要概念与注意事项
a. 空字符串 () vs. null
这是一个非常常见的混淆点。
- 空字符串 (): 这是一个有效的
String对象,它不包含任何字符,它的长度是0。 null: 这表示一个没有引用任何对象的引用变量,你不能在null上调用任何方法,否则会抛出NullPointerException。
示例代码:区分空字符串和 null
public class StringNullEmptyExample {
public static void main(String[] args) {
String emptyStr = "";
String nullStr = null;
System.out.println("空字符串的长度: " + emptyStr.length()); // 输出: 0
// 下面的代码会抛出 java.lang.NullPointerException
// System.out.println("null字符串的长度: " + nullStr.length());
}
}
最佳实践: 在使用字符串前,最好先检查它是否为 null。
String myStr = "some text";
if (myStr != null && myStr.length() > 0) {
// 安全地使用字符串
System.out.println("字符串不为空且长度大于0");
}
b. length() vs. 数组的 length
Java 初学者经常混淆这两个概念。

| 特性 | String.length() |
数组的 length |
|---|---|---|
| 类型 | 方法 (Method) | 属性/字段 (Field/Property) |
| 语法 | myString.length() |
myArray.length |
| 用途 | 获取 String 对象中的字符数量 |
获取数组中元素的数量 |
| 示例 | "abc".length() 返回 3 |
int[] arr = {1, 2, 3}; arr.length 返回 3 |
c. length() 与 Unicode 字符 (重要!)
在 Java 中,char 类型使用 UTF-16 编码,这意味着一个 Unicode 字符可能需要一个 char 或两个 char 来表示。
- 基本多语言平面 中的字符(如英文字母、常用汉字、欧洲字符)通常用一个
char表示。 - 辅助平面 中的字符(如某些生僻汉字、Emoji 表情符号、特殊符号)需要两个
char组成一个代理对 来表示。
对于这些由代理对组成的字符,length() 方法会返回 2,因为它只计算 char 的数量,而不是抽象的 Unicode 代码点数量。
示例代码:length() 与代码点
public class StringUnicodeLengthExample {
public static void main(String[] args) {
// 1. 常规字符 (每个字符长度为1)
String str1 = "你好";
System.out.println("字符串 \"" + str1 + "\" 的长度: " + str1.length()); // 输出: 2
// 2. Emoji表情 (一个Emoji,但长度为2)
// '😂' 是一个Emoji,它在UTF-16中需要两个char表示
String str2 = "😂";
System.out.println("Emoji字符串 \"" + str2 + "\" 的长度: " + str2.length()); // 输出: 2
// 3. 混合情况
String str3 = "a😂b";
System.out.println("混合字符串 \"" + str3 + "\" 的长度: " + str3.length()); // 输出: 4 (a + 😂(2) + b)
}
}
如果你需要获取真正的 Unicode 代码点数量(即“人类”理解的字符数),应该使用 codePointCount() 方法。
d. codePointCount() 方法
codePointCount(int beginIndex, int endIndex) 方法返回从 beginIndex 到 endIndex-1 范围内的 Unicode 代码点数量。

示例代码:使用 codePointCount()
public class CodePointCountExample {
public static void main(String[] args) {
String str = "a😂b";
int charLength = str.length(); // 返回 4
int codePointLength = str.codePointCount(0, str.length()); // 返回 3
System.out.println("字符串: \"" + str + "\"");
System.out.println("char 数量 (length): " + charLength);
System.out.println("Unicode 代码点数量 (codePointCount): " + codePointLength);
}
}
- 如果你想知道字符串占用了多少内存空间(即
char的数量),使用length()。 - 如果你想知道字符串里有多少个“可见的”或“逻辑上的”字符,使用
codePointCount()。
常见用法场景
-
循环遍历字符串:
String text = "Java"; for (int i = 0; i < text.length(); i++) { char c = text.charAt(i); System.out.println("字符 " + i + ": " + c); } -
检查字符串是否为空:
String input = "some data"; if (input != null && input.length() == 0) { System.out.println("字符串为空"); } -
截取字符串:
String sentence = "This is a long sentence."; // 截取前5个字符 String sub = sentence.substring(0, 5); // "This "
-
限制用户输入长度:
String username = "a_very_long_username"; int maxLength = 10; if (username.length() > maxLength) { System.out.println("用户名过长,最大长度为 " + maxLength); }
总结表格
| 方法/概念 | 描述 | 返回值 | 示例 |
|---|---|---|---|
length() |
最常用,返回字符串中的 char 数量。 |
int |
"abc".length() -> 3 "😂".length() -> 2 |
codePointCount() |
返回字符串中的 Unicode 代码点(逻辑字符)数量。 | int |
"a😂b".codePointCount(0, 4) -> 3 |
| 空字符串 | 长度为 0 的有效 String 对象。 |
length() 返回 0 |
"".length() -> 0 |
null |
没有指向任何 String 对象的引用。 |
调用方法会抛出 NullPointerException |
str.length() (str 是 null) -> 异常 |
希望这个详细的解释能帮助你完全理解 Java 中 String 的长度问题!
