在Java编程中,字符串是最常用的数据类型之一,而获取字符串的长度是许多操作的基础,无论是输入验证、字符串截取还是循环遍历,正确获取字符串长度都至关重要,本文将详细介绍Java中查找字符串长度的方法、注意事项及实际应用场景,帮助开发者全面掌握这一基础技能。

基础方法:String.length()
Java中获取字符串长度最直接的方式是调用String类的length()方法,该方法属于String类的实例方法,返回值为int类型,表示字符串中字符的数量(包括空格、标点符号等所有可见及不可见字符)。
示例代码
public class StringLengthExample {
public static void main(String[] args) {
String str1 = "Hello, Java!";
String str2 = " "; // 包含3个空格
String str3 = ""; // 空字符串
System.out.println("str1的长度: " + str1.length()); // 输出: 12
System.out.println("str2的长度: " + str2.length()); // 输出: 3
System.out.println("str3的长度: " + str3.length()); // 输出: 0
}
}
从示例中可以看出,length()方法会严格计算字符串中的所有字符,即使空格也会被计入长度,空字符串的长度为0,这是判断字符串是否为空的重要依据。
区分length()与其他“长度”方法
初学者容易混淆String.length()与数组的.length属性、集合的.size()方法,三者的适用场景和调用方式完全不同:
- String.length():String类的实例方法,用于获取字符串字符数量。
- 数组.length:数组的属性(非方法),用于获取数组元素的个数(如
int[] arr = new int[5]; arr.length返回5)。 - 集合.size():集合接口的方法(如List、Set),用于获取集合中元素的个数(如
List<String> list = new ArrayList<>(); list.size()返回0)。
错误示例
String str = "Java";
int len = str.length; // 错误:length是方法,需加括号
int[] arr = {1, 2, 3};
int size = arr.size(); // 错误:数组无size()方法,应使用arr.length
牢记三者的区别,能有效避免编译错误和逻辑问题。
处理Unicode字符:CodePointCount()的正确使用
Java字符串基于UTF-16编码,而length()方法返回的是“代码单元”(code unit)的数量,而非“ Unicode代码点”(code point)的数量,对于大多数ASCII字符(如字母、数字),一个代码点对应一个代码单元;但对于增补字符(如Emoji、某些特殊符号),可能需要两个代码单元表示。length()的返回值会与实际字符数量不符。

示例:Emoji字符的长度
String emoji = "😊"; // 笑脸Emoji,Unicode代码点为U+1F60A
String surrogatePair = "\uD83D\uDE00"; // 等同于Emoji的UTF-16代理对表示
System.out.println("Emoji的length(): " + emoji.length()); // 输出: 2
System.out.println("代理对的length(): " + surrogatePair.length()); // 输出: 2
上述代码中,实际是一个字符,但length()返回2,因为它由两个代码单元(代理对)组成,若需获取真正的字符数量(即代码点数量),应使用String.codePointCount()方法。
codePointCount()用法
该方法接收两个参数:起始索引和结束索引(左闭右开),返回指定范围内的代码点数量。
String str = "😊Java";
System.out.println("代码点数量: " + str.codePointCount(0, str.length())); // 输出: 5(😊、J、a、v、a)
需要注意的是,codePointCount()的结束索引不能超过字符串长度,否则会抛出StringIndexOutOfBoundsException。
空值安全:避免NullPointerException
直接对null字符串调用length()会抛出NullPointerException,在实际开发中,需先判断字符串是否为null,或使用工具类进行安全处理。
安全处理方式
- if条件判断
String str = null; if (str != null) { System.out.println("长度: " + str.length()); } else { System.out.println("字符串为null"); } - 使用Objects工具类(Java 7+)
String str = null; try { int len = Objects.requireNonNull(str, "字符串不能为null").length(); } catch (NullPointerException e) { System.out.println(e.getMessage()); } - 使用StringUtils(Apache Commons Lang)
String str = null; int len = StringUtils.length(str); // 返回0,不会抛出异常
推荐优先使用
if判断或StringUtils,避免因空值导致程序中断。
性能与应用场景分析
length()方法的时间复杂度为O(1),因为String类内部维护了一个private final int value[]字段(存储字符数组)和private int hash字段,而length()直接返回value.length,无需遍历字符串,性能极高。
常见应用场景
- 输入验证:检查用户名、密码长度是否符合要求。
String username = "admin"; if (username.length() < 4 || username.length() > 16) { System.out.println("用户名长度需为4-16位"); } - 字符串截取:获取字符串前N个字符。
String text = "Hello, World!"; String sub = text.substring(0, 5); // 取前5个字符:"Hello"
- 循环遍历:基于字符串长度遍历每个字符。
String str = "Java"; for (int i = 0; i < str.length(); i++) { System.out.println(str.charAt(i)); }
在Java中,String.length()是获取字符串长度的核心方法,适用于大多数场景,但需注意:
- 对于包含增补字符(如Emoji)的字符串,使用
codePointCount()获取实际字符数量; - 处理可能为null的字符串时,务必进行空值检查;
- 区分
length()与数组.length、集合.size(),避免混淆。
掌握这些细节,能更高效、安全地进行字符串操作,为复杂编程打下坚实基础。

















