strip()是最优雅的方式,它基于Unicode 13.0+标准识别25+类空白字符,如全角空格、零宽空格等,而trim()仅识别ASCII控制符,Java 11+还提供stripLeading()和stripTrailing()。

直接用 strip() 就是最优雅的方式——它语义清晰、覆盖全面,且符合现代 Unicode 规范。
strip() 是 trim() 的现代化替代
两者都返回新字符串、不修改原串,但判断“什么是空白”的标准完全不同:
-
trim() 只看字符码点是否 ≤
'u0020'(即 U+0000 到 U+0020),包括空格、、、、等 ASCII 控制符 -
strip() 调用
Character.isWhitespace(int),依据 Unicode 13.0+ 标准,识别全部 25+ 类空白字符,比如:
全角空格u3000、零宽空格u200B、行分隔符u2028、段落分隔符u2029、EM 空格u2003等
常见场景下行为差异明显
用户粘贴或前端传入的文本常含非 ASCII 空白,这时 trim() 就会失效:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
-
" hello ".trim()→ 仍是" hello "(全角空格没被去掉) -
" hello ".strip()→ 正确得到"hello" -
"au200Bb".trim()→ 还是"au200Bb"(零宽空格残留) -
"au200Bb".strip()→ 同样不变(因在中间,strip 不动中间)
更细粒度控制:stripLeading() 和 stripTrailing()
Java 11+ 还提供两个配套方法,语义比手动切分或正则更直观:
-
str.stripLeading():只清理开头所有 Unicode 空白 -
str.stripTrailing():只清理结尾所有 Unicode 空白 - 它们和
strip()共享同一套空白判定逻辑,不是trim()的变体
兼容性与性能的小提醒
选哪个,关键看运行环境和需求:
- 项目用 Java 11 或更高版本 → 默认用
strip(),无需犹豫 - 必须支持 Java 8?可用
Apache Commons Lang的StringUtils.strip(),或手写循环调用Character.isWhitespace() - 性能上
trim()略快(纯数值比较),但对绝大多数业务字符串,差异可忽略 - 别用正则
replaceAll("^\s+|\s+$", "")替代 —— Java 默认s不匹配全角空格等,除非显式加UNICODE_CHARACTER_CLASS标志
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










