strip()更优:jdk11+按unicode标准识别全角空格、不换行空格等广义空白,trim()仅处理ascii控制字符(u+0000–u+0020),兼容旧版但范围窄。

Java 中去除字符串空白,trim() 和 strip() 都能用,但行为不同:前者只删 ASCII 空白(如空格、制表符、换行符),后者按 Unicode 标准识别更广义的空白字符(比如全角空格、不换行空格、零宽空格等),且更符合现代文本处理需求。
trim():传统方式,兼容性好但范围窄
trim() 是 JDK 1.0 就有的方法,它会移除字符串首尾的「ASCII 控制字符」(Unicode 编码在 '\u0000' 到 '\u0020' 之间),包括:
- 空格(
' ',U+0020) - 制表符(
'\t',U+0009) - 换行符(
'\n',U+000A) - 回车符(
'\r',U+000D) - 垂直制表符、换页符等(U+000B、U+000C)
但它不识别如全角空格(U+3000)、不换行空格(U+00A0)、零宽空格(U+200B)等 Unicode 空白。例如:
String s = "\u3000Hello\u3000";s.trim(); // 返回 "\u3000Hello\u3000"(没变化)
strip():JDK 11+ 推荐方式,语义更准确
strip() 是 JDK 11 引入的新方法,依据 Unicode White_Space 属性 判断空白,覆盖所有标准空白字符,包括:
- 常见 ASCII 空白(同
trim()) - 不换行空格(
'\u00A0') - 全角空格(
'\u3000') - 零宽空格(
'\u200B')、零宽非连接符('\u200C')等
所以对含全角空格或网页粘贴来的“隐形空格”的字符串更可靠:
String s = "\u3000Hello\u3000";s.strip(); // 返回 "Hello"
stripLeading() 和 stripTrailing():更细粒度控制
JDK 11 还提供了两个配套方法,分别只处理开头或结尾:
-
stripLeading():仅移除开头的 Unicode 空白 -
stripTrailing():仅移除结尾的 Unicode 空白
相比用 substring() 手动截取,它们语义清晰、性能更好,也支持 Unicode。
注意事项和建议
- 如果项目最低 JDK 版本是 11 或更高,优先用
strip()替代trim() - 若需兼容 JDK 8/9/10,可引入 Apache Commons Lang 的
StringUtils.strip(),它也支持 Unicode 空白 -
trim()不会抛异常,输入null会 NPE;strip()同样要求非 null,使用前建议判空 - 二者都返回新字符串(String 不可变),原字符串不受影响
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











