杰瑞科技汇

Java字符串长度如何计算?

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

Java字符串长度如何计算?-图1
(图片来源网络,侵删)

核心方法: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 初学者经常混淆这两个概念。

Java字符串长度如何计算?-图2
(图片来源网络,侵删)
特性 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) 方法返回从 beginIndexendIndex-1 范围内的 Unicode 代码点数量。

Java字符串长度如何计算?-图3
(图片来源网络,侵删)

示例代码:使用 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()

常见用法场景

  1. 循环遍历字符串:

    String text = "Java";
    for (int i = 0; i < text.length(); i++) {
        char c = text.charAt(i);
        System.out.println("字符 " + i + ": " + c);
    }
  2. 检查字符串是否为空:

    String input = "some data";
    if (input != null && input.length() == 0) {
        System.out.println("字符串为空");
    }
  3. 截取字符串:

    String sentence = "This is a long sentence.";
    // 截取前5个字符
    String sub = sentence.substring(0, 5); // "This "
  4. 限制用户输入长度:

    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() (strnull) -> 异常

希望这个详细的解释能帮助你完全理解 Java 中 String 的长度问题!

分享:
扫描分享到社交APP
上一篇
下一篇