1. 概述
Java 11 为最常用的 String
类新增了几个非常实用的 API。这些方法虽然看起来简单,但在日常开发中能显著提升代码可读性和开发效率。本文将逐一介绍这些新特性,并结合示例演示它们的用法。
2. repeat()
方法:字符串重复拼接
顾名思义,repeat(int n)
会将当前字符串重复拼接 n
次并返回结果。
✅ 适用场景:快速生成重复内容,比如日志分隔符、测试数据等。
@Test
public void whenRepeatStringTwice_thenGetStringTwice() {
String output = "La ".repeat(2) + "Land";
assertEquals("La La Land", output);
}
⚠️ 注意事项:
- 如果传入参数为 0 或字符串本身为空,则返回空字符串。
- 参数不能为负数,否则抛出
IllegalArgumentException
。
3. strip*()
系列方法:更智能的空白字符清理
Java 11 引入了以下三个用于去除空白字符的方法:
方法名 | 功能说明 |
---|---|
strip() |
去除首尾所有 Unicode 空白字符 |
stripLeading() |
仅去除开头空白字符 |
stripTrailing() |
仅去除结尾空白字符 |
示例:
@Test
public void whenStripString_thenReturnStringWithoutWhitespaces() {
assertEquals("hello", "\n\t hello \u2005".strip());
}
3.1. strip()
vs trim()
:谁更懂 Unicode?
虽然功能类似,但两者在处理 Unicode 空白字符时表现不同:
- ✅
strip()
使用Character.isWhitespace()
判断空白字符,支持完整的 Unicode 规范。 - ❌
trim()
只识别 ASCII 范围内(≤ U+0020)的空白字符。
看个例子就明白了:
@Test
public void whenTrimAdvanceString_thenReturnStringWithWhitespaces() {
// \u2005 是一个 Unicode 空格字符,trim 不认识它
assertEquals("hello \u2005", "\n\t hello \u2005".trim());
}
结论:如果你要兼容 Unicode 空白字符,优先使用 strip()
。
4. isBlank()
方法:判断是否为空或纯空白
这个方法用于判断字符串是否为空或者只包含空白字符(包括 Unicode 空白),返回布尔值。
✅ 实用性很高,尤其在做表单校验或输入清洗时。
@Test
public void whenBlankString_thenReturnTrue() {
assertTrue("\n\t\u2005 ".isBlank());
}
⚠️ 与 isEmpty()
的区别:
isEmpty()
只检查长度是否为 0。isBlank()
还会检查内容是否全是空白字符。
5. lines()
方法:按行拆分字符串为 Stream
该方法可以将多行字符串按行终止符(\n
, \r
, \r\n
)分割成一个 Stream<String>
,每行的内容不包含行终止符。
✅ 非常适合处理文本文件、SQL 脚本、日志等多行内容。
@Test
public void whenMultilineString_thenReturnNonEmptyLineCount() {
String multilineStr = "This is\n \n a multiline\n string.";
long lineCount = multilineStr.lines()
.filter(line -> !line.isBlank())
.count();
assertEquals(3L, lineCount); // 实际非空行为 3 行
}
💡 小贴士:
- 相比于
split("\n")
,lines()
更高效,也更安全。 - 返回的是惰性求值的
Stream
,适合链式操作和大数据量处理。
6. 总结
Java 11 在 String
类上新增的这几个方法虽然小巧,但在实际项目中却非常实用。尤其是 strip()
、isBlank()
和 lines()
,在处理文本内容时能有效减少样板代码。
📦 示例代码可以在 GitHub 仓库 找到。
🎯 一句话总结:
Java 11 给 String 加了点料,虽然不多,但够香!