源本科技 | 码上会

Java 字符串常用方法

2025/12/26
41
0

学习目标

  • 掌握 Java String 类中最常用的 19 个内置方法

  • 理解每个方法的功能、参数、返回值及典型应用场景

  • 能够在实际开发中灵活组合使用这些方法处理文本数据

  • 区分 equals()==compareTo()equals() 等易混淆概念


正文内容

1. int length()

作用:返回字符串中字符的个数(包括空格和标点)。

String s = "Hello, World!";
System.out.println(s.length()); // 输出:13

💡 注意:中文字符也按一个字符计算(UTF-16 编码下,大部分常用汉字占一个 char)。


2. char charAt(int index)

作用:返回指定索引位置的字符(索引从 0 开始)。

String s = "Hello";
System.out.println(s.charAt(1)); // 输出:e

⚠️ 若索引越界(<0 或 ≥ length()),抛出 StringIndexOutOfBoundsException


3. String substring(int beginIndex)

作用:从 beginIndex 开始截取到字符串末尾。

String s = "Hello, World!";
System.out.println(s.substring(7)); // 输出:World!

4. String substring(int beginIndex, int endIndex)

作用:截取 [beginIndex, endIndex) 区间的子串(包含起始,不包含结束)。

String s = "Hello, World!";
System.out.println(s.substring(7, 12)); // 输出:World

✅ 记忆技巧:substring(a, b) 相当于“从 a 到 b 前一个”。


5. String concat(String str)

作用:将指定字符串拼接到当前字符串末尾,返回新字符串。

String s = "Hello";
System.out.println(s.concat(" World!")); // 输出:Hello World!

🔔 注意:若 strnull,会抛出 NullPointerException


6. int indexOf(String str)

作用:返回子串首次出现的索引,未找到返回 -1

String s = "Hello, World!";
System.out.println(s.indexOf("World")); // 输出:7

7. int indexOf(String str, int fromIndex)

作用:从指定位置开始查找子串首次出现的索引。

String s = "Hello, World!";
System.out.println(s.indexOf("l", 4)); // 从索引4开始找'l' → 输出:10

8. int lastIndexOf(String str)

作用:返回子串最后一次出现的索引。

String s = "Hello, World!";
System.out.println(s.lastIndexOf("l")); // 输出:10(最后一个 'l')

9. boolean equals(Object obj)

作用严格比较两个字符串的内容是否完全相同(区分大小写)。

String s = "Hello";
System.out.println(s.equals("Hello"));     // true
System.out.println(s.equals("hello"));     // false
System.out.println(s.equals(null));        // false(不会报错)

永远用 .equals() 比较字符串内容,不要用 ==== 比较引用地址)。


10. boolean equalsIgnoreCase(String str)

作用:忽略大小写比较字符串内容。

String s = "Hello";
System.out.println(s.equalsIgnoreCase("HELLO")); // true

11. int compareTo(String anotherString)

作用按字典顺序(lexicographical order)比较两个字符串,返回整数:

  • < 0:当前字符串小于参数

  • = 0:相等

  • > 0:当前字符串大于参数

System.out.println("apple".compareTo("banana")); // 负数(a < b)
System.out.println("Hello".compareTo("Hello"));  // 0

📌 应用场景:排序(如 Collections.sort() 默认使用此方法)。


12. int compareToIgnoreCase(String str)

作用:忽略大小写的字典序比较。

System.out.println("Apple".compareToIgnoreCase("apple")); // 0

13. String toLowerCase()

作用:将所有字符转为小写。

String s = "Hello, World!";
System.out.println(s.toLowerCase()); // hello, world!

14. String toUpperCase()

作用:将所有字符转为大写。

String s = "Hello, World!";
System.out.println(s.toUpperCase()); // HELLO, WORLD!

💡 这两个方法遵循当前系统的区域设置(Locale),如需指定区域,可用 toLowerCase(Locale)


15. String trim()

作用去除字符串首尾的空白字符(如空格、制表符 \t、换行符 \n),中间空白保留。

String s = "   Hello Trim!   ";
System.out.println("'" + s.trim() + "'"); // 'Hello Trim!'

⚠️ 注意:trim() 不处理 Unicode 空白字符(如不间断空格 \u00A0),Java 11+ 可用 strip() 替代。


16. String replace(char oldChar, char newChar)

作用:将所有 oldChar 替换为 newChar

String s = "Hello";
System.out.println(s.replace('l', 'x')); // Hexxo

🔁 Java 8+ 还支持 replace(CharSequence target, CharSequence replacement),可替换子串。


17. boolean contains(CharSequence sequence)

作用:判断字符串是否包含指定子序列。

String s = "Hello, World!";
System.out.println(s.contains("World")); // true

✅ 内部调用 indexOf(),若返回值 ≥ 0 则为 true


18. char[] toCharArray()

作用:将字符串转换为字符数组。

String s = "Hello";
char[] arr = s.toCharArray();
for (char c : arr) {
    System.out.print(c + " "); // H e l l o 
}

🛠️ 常用于需要逐字符处理或修改(配合 StringBuilder)的场景。


19. boolean startsWith(String prefix)

作用:判断字符串是否以指定前缀开头。

String s = "https://example.com";
System.out.println(s.startsWith("https")); // true

🔍 还有 startsWith(String prefix, int toffset) 可从指定位置开始检查。


重点总结

方法类别

核心方法

关键特性

信息获取

length(), charAt()

获取长度与单个字符

截取子串

substring()

左闭右开区间

拼接与替换

concat(), replace()

返回新字符串

查找定位

indexOf(), lastIndexOf(), contains()

未找到返回 -1 或 false

比较判断

equals(), equalsIgnoreCase(), compareTo()

内容 vs 引用,大小写敏感

格式转换

toLowerCase(), toUpperCase(), trim()

不改变原字符串

类型转换

toCharArray()

转为可变字符数组

黄金法则

  • 所有方法均不修改原字符串(因 String 不可变)

  • 比较内容用 .equals(),排序用 .compareTo()

  • 动态构建字符串优先考虑 StringBuilder


思考题

  1. s1.equals(s2)s1.compareTo(s2) == 0 在功能上是否等价?在什么情况下结果可能不同?

  2. 为什么 trim() 不能去除字符串中间的空格?如果需要删除所有空格,应如何实现?

  3. 给定一个邮箱字符串 " User@Example.COM ",请使用所学方法将其标准化为 "user@example.com"(去空格、转小写)。