在 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()

解决什么问题?

  • 以前需要用 BufferedReadersplit("\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"
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐