本文目录导读:

- Java 11 新增(目前最常用、最具代表性的)
- Java 12 新增
- Java 13 新增
- Java 15 正式版(Text Blocks 稳定)
- Java 17 / 18 / 20+ 新增(较少但有用)
- 实际开发中最高频使用的几个
在 Java 8 之后,尤其是 Java 11 和 Java 12+ 版本中,String 类增加了许多非常实用且高频的新方法,以下按版本分类列出主要的新方法及简要说明:
Java 11 新增(目前最常用、最具代表性的)
这些方法主要用于简化字符串处理,特别是 判空、重复、行处理 等场景。
| 方法 | 说明 |
|---|---|
isBlank() |
判断字符串是否为 空白(空字符串或仅含空白字符,如空格、Tab、换行等) |
lines() |
返回一个 Stream<String>,按 换行符(\n、\r、\r\n)分割字符串 |
strip() |
去除字符串 首尾 的 全角/半角空格、制表符等(比 trim() 更强,支持 Unicode) |
stripLeading() |
仅去除 开头 的空白 |
stripTrailing() |
仅去除 的空白 |
repeat(int count) |
返回一个重复 count 次的新字符串(count=0 返回空字符串) |
示例:
String s = " Hello \n World ";
System.out.println(s.isBlank()); // false
System.out.println(" ".isBlank()); // true
System.out.println(s.strip()); // "Hello \n World"(保留中间空白)
System.out.println("*".repeat(5)); // "*****"
s.lines().forEach(System.out::println); // 按行输出
Java 12 新增
| 方法 | 说明 |
|---|---|
indent(int n) |
对字符串的 每一行 添加/移除缩进(正数增加,负数减少) |
transform(Function<? super String, ? extends R> f) |
对字符串应用一个函数并返回结果(链式处理,类似 map) |
示例:
String s = "Hello\nWorld"; System.out.println(s.indent(4)); // 每行前加4个空格 String result = "hello".transform(str -> str.toUpperCase() + "!"); System.out.println(result); // "HELLO!"
Java 13 新增
主要用于 文本块(Text Blocks)的预览特性(正式版在 Java 15),但对字符串方法本身没有新增。
Java 15 正式版(Text Blocks 稳定)
虽然 Text Blocks()是语言特性,但通常与 stripIndent()、translateEscapes() 等方法配合使用:
| 方法 | 说明 |
|---|---|
stripIndent() |
去除文本块中 每行共有的前导空白(常用于格式化多行字符串) |
translateEscapes() |
将字符串中的转义序列(如 \n)转换为实际字符(类似 C 语言中的转义处理) |
formatted(Object... args) |
等价于 String.format(this, args),方便在文本块内使用占位符 |
示例:
String json = """
{
"name": "%s",
"age": %d
}
""".formatted("Alice", 30).stripIndent();
System.out.println(json);
Java 17 / 18 / 20+ 新增(较少但有用)
没有大量新增实例方法,主要是一些细节优化和内部性能提升,实际开发中重点关注 Java 11 和 15 的方法即可。
实际开发中最高频使用的几个
isBlank()—— 替代s == null || s.trim().isEmpty()的代码strip()/stripLeading()/stripTrailing()—— 比trim()更安全(支持 Unicode 空白)repeat(n)—— 快速生成重复字符串,不用循环lines()—— 按行处理多行文本(如日志解析)indent(n)—— 快速调整多行文本缩进
如果你的 JDK 版本低于 11,建议升级,因为这些方法能极大简化日常字符串操作。