贝利信息

Java常用字符串类库与String操作

日期:2026-01-09 00:00 / 作者:P粉602998670
Java String不可变是为了字符串常量池、线程安全和哈希缓存优化,每次操作如substring()都新建对象;频繁拼接导致GC压力大,比较必须用equals();可变场景应选StringBuilder或StringBuffer。

String 为什么不可变,以及它如何影响日常操作

Java 的 String 不可变不是设计癖好,而是为了字符串常量池、线程安全和哈希缓存优化。你每次调用 substring()toLowerCase()replace(),其实都新建了一个对象——原字符串毫发无损。

这直接导致两个常见问题:

如果真需要可变字符串,用 StringBuilder(单线程)或 StringBuffer(线程安全但慢),别硬扛 String

Apache Commons Lang 的 StringUtils 解决哪些原生痛点

原生 String API 缺少空安全、批量处理和语义明确的工具方法。StringUtils(来自 commons-lang3)补上了这些缺口,比如:

注意:它不处理 Unicode 边界(如代理对),做国际化文本处理仍需 java.text.BreakIterator

Java 11+ 新增的 String 实用方法怎么用才不踩坑

Java 11 引入了几个高频需求方法,但部分行为容易误解:

try (Stream lines = text.lines()) {
    lines.filter(s -> !s.isBlank()).forEach(System.out::println);
}

正则替换与性能敏感场景该选哪个类

做模式匹配或替换时,别只盯着 String.replaceAll()。它每次调用都会编译正则,反复使用同一模式时开销明显:

String 类本身没提供“替换前 n 次”的方法,得靠 Matcher.replaceFirst() 或手动迭代 Matcher.find() —— 这种细节,StringUtils.replaceOnce() 已帮你封装好。