重学Java基础篇—Java11字符串处理增强详解

在这里插入图片描述

Java 11 对 String 类进行了多项增强,引入以下新方法,覆盖空白处理、多行文本分割和字符串重复等场景。

以下是所有新增方法的详细说明及实战示例:


1. isBlank():检测空白字符串

作用
判断字符串是否为空或仅包含空白字符(支持 Unicode 空白,如全角空格 \u3000)。

示例

String empty = "";
String spaces = "   ";
String unicodeSpace = "\u2003"; // Unicode 空白字符(EM SPACE)

System.out.println(empty.isBlank());    // true
System.out.println(spaces.isBlank());   // true
System.out.println(unicodeSpace.isBlank()); // true

对比 isEmpty()

System.out.println(empty.isEmpty());    // true
System.out.println(spaces.isEmpty());   // false(长度不为0)
System.out.println(unicodeSpace.isEmpty()); // false

2. lines():按行分割为流

作用
将字符串按换行符 \n\r\n 分割为 Stream<String>,适合处理多行文本。

示例

String text = "Line 1\nLine 2\r\nLine 3";
List<String> lines = text.lines()
    .map(line -> "Processed: " + line)
    .collect(Collectors.toList());

System.out.println(lines);
// 输出:[Processed: Line 1, Processed: Line 2, Processed: Line 3]

性能特点

  • 惰性处理:逐行生成流,避免一次性加载大文本到内存。
  • 内存高效:适合处理大型文件(如日志分析)。

3. strip():去除首尾空白

作用
去除字符串首尾的空白字符(包括 Unicode 空白,如 \u2003)。

示例

String input = "   Hello Java 11!   ";
String stripped = input.strip();
System.out.println(stripped); // "Hello Java 11!"

对比 trim()

String unicodeInput = "\u2003Trim Test\u2003";
System.out.println(unicodeInput.trim().length());   // 10(未去除 Unicode 空白)
System.out.println(unicodeInput.strip().length()); // 8(正确去除)

4. stripLeading()stripTrailing():定向去除空白

作用

  • stripLeading():仅去除字符串开头的空白。
  • stripTrailing():仅去除字符串结尾的空白。

示例

String text = "   Hello   ";
System.out.println(text.stripLeading());    // "Hello   "
System.out.println(text.stripTrailing());   // "   Hello"

5. repeat(int n):重复字符串

作用
将字符串重复 n 次生成新字符串。

示例

String base = "Java";
String repeated = base.repeat(3);
System.out.println(repeated); // "JavaJavaJava"

性能优化

  • 时间复杂度为 O(n),底层使用 Arrays.fill 高效实现。
  • 适用于生成固定模式字符串(如分隔符、占位符)。

四、实战场景

场景 1:用户输入验证
public class InputValidator {
    public static void validate(String input) {
        if (input == null || input.isBlank()) {
            throw new IllegalArgumentException("输入不能为空");
        }
        // 进一步处理...
    }
}
场景 2:CSV 数据处理
String csvData = "Name, Age, City\nAlice, 30, New York\nBob,  London";
List<Person> persons = csvData.lines()
    .skip(1) // 跳过表头
    .map(line -> {
        String[] fields = line.split(", ");
        return new Person(fields[0], Integer.parseInt(fields[1]), fields[2]);
    })
    .collect(Collectors.toList());
场景 3:生成动态 SQL 条件
public class QueryBuilder {
    public static String buildWhereClause(List<String> conditions) {
        if (conditions.isEmpty()) {
            return "";
        }
        return "WHERE " + String.join(" AND ", conditions.stream()
            .map(cond -> "(" + cond + ")")
            .toArray(String[]::new));
    }
}

五、总结对比

方法功能Unicode 支持替代旧方法
isBlank()检测空或全空白字符串手动正则检查
strip()去除首尾空白(含 Unicode)trim()
lines()分割多行文本为流split("\\r?\\n")
repeat(n)重复字符串不适用手动循环拼接

最佳实践

  • 优先使用新方法:替代繁琐的正则或手动处理。
  • 注意性能场景:大文本处理用 lines() 避免内存溢出。
  • 处理国际化内容:使用 strip() 确保兼容多语言空白字符。

通过合理利用这些增强方法,代码可读性、健壮性和性能均能得到显著提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Remember_Ray

何其有幸,得你青睐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值