在 Java 8 及更早版本,String 类虽然已经非常强大,但在一些常用场景下依旧显得笨拙。比如:去除空白只能依赖 trim(),判断是否为空字符串需要自己写工具方法,拼接重复字符还要用循环。
自 Java 11 起,String 类迎来了一系列实用增强,大幅提升了开发体验。本文带你快速梳理这些新方法,并给出最佳实践。
1. strip() / stripLeading() / stripTrailing()
解决什么问题?
- 老的
trim()只能去除 ASCII 空白字符,遇到 Unicode 空白(如全角空格)无效。 - 新的
strip()系列方法基于 Unicode 标准,可以正确处理各种空白字符。
示例
String s = " Hello Java "; // 前后有全角空格
System.out.println(s.trim()); // 输出: Hello Java
System.out.println(s.strip()); // 输出:Hello Java
System.out.println(s.stripLeading()); // 输出:Hello Java
System.out.println(s.stripTrailing()); // 输出: Hello Java
使用场景
- 处理多语言输入(含中文、日文空格)。
- 替代
trim()的更强健方案。
2. isBlank()
解决什么问题?
- 以前需要写
str == null || str.trim().isEmpty()来判断空白字符串,既冗长又容易出错。
示例
System.out.println("".isBlank()); // true
System.out.println(" ".isBlank()); // true
System.out.println("\n\t".isBlank()); // true
System.out.println("Java".isBlank()); // false
使用场景
- 用户输入校验。
- 配置文件读取时过滤空白行。
3. repeat(int count)
解决什么问题?
- 以前拼接重复字符/字符串要么用循环,要么用
StringBuilder,非常繁琐。
示例
String line = "-".repeat(10);
System.out.println(line); // ----------
使用场景
- 输出分隔线。
- 简单构造测试数据。
4. lines()
解决什么问题?
- 以前需要用
BufferedReader或split("\n")才能按行分割字符串。
示例
String text = "Java\nKotlin\nScala";
text.lines().forEach(System.out::println);
// 输出:
// Java
// Kotlin
// Scala
使用场景
- 多行文本的快速处理。
- 配合 Stream API 做统计/过滤。
5. indent(int n)
解决什么问题?
- 给多行字符串加缩进,原来需要手动拼接。
示例
String text = "Hello\nJava";
System.out.println(text.indent(4));
输出:
Hello
Java
使用场景
- 格式化日志或报表。
- 代码生成工具。
6. transform(Function<String, R> f)
解决什么问题?
- 让字符串与函数式 API 更好结合。
示例
String result = "java"
.transform(s -> s.toUpperCase())
.transform(s -> "Hello " + s);
System.out.println(result); // Hello JAVA
使用场景
- 流式处理字符串。
- 在链式调用中保持可读性。
总结
strip*()系列:取代trim(),支持 Unicode 空白。isBlank():更简洁的空白判断。repeat():快速生成重复字符串。lines():字符串按行处理。indent():多行文本缩进。transform():结合函数式编程。
这些方法看似“小而美”,但在日常开发中却能极大减少样板代码。如果你正在使用 JDK 11+,推荐全面拥抱这些新方法,让代码更简洁、更优雅。
📑 String 新方法速查表(JDK 11+)
| 方法 | 功能 | 示例 |
|---|---|---|
strip() | 去掉前后空白(支持 Unicode) | " Hello ".strip() → "Hello" |
stripLeading() | 去掉前导空白 | " Java".stripLeading() → "Java" |
stripTrailing() | 去掉尾部空白 | "Java ".stripTrailing() → "Java" |
isBlank() | 判断字符串是否为空白 | " ".isBlank() → true |
repeat(int n) | 重复字符串 | "-".repeat(5) → "-----" |
lines() | 按行拆分为 Stream<String> | "A\nB".lines() → ["A", "B"] |
indent(int n) | 为每行添加缩进 | "Hello\nJava".indent(2) |
transform(Function) | 函数式处理字符串 | "java".transform(s -> s.toUpperCase()) → "JAVA" |
783

被折叠的 条评论
为什么被折叠?



