Java中处理字符串多余空格需区分首尾与中间:trim()仅去首尾空白,replaceAll("\s+", " ")压缩中间连续空白为单空格;推荐组合使用trim().replaceAll("\s+", " ")或Apache Commons的StringUtils.normalizeSpace()。

Java中处理字符串多余空格,核心是区分“首尾空格”和“中间多余空格”——trim()只去首尾,正则替换才能压缩中间多个空格为一个。
快速去除首尾空格:trim() 最常用
String.trim() 是最基础也最安全的方式,它会移除字符串开头和结尾的所有 Unicode 空白字符(包括空格、制表符、换行符等),但不会动中间的空格。
- 适用场景:用户输入框提交前清洗、日志拼接前标准化
- 注意点:返回的是新字符串,原字符串不可变;对 null 调用会抛 NullPointerException
- 安全写法:str != null ? str.trim() : ""
压缩中间多个空格为单个:replaceAll() 配合正则
用 replaceAll("\\s+", " ") 可把连续的空白字符(空格、制表、换行等)统一替换成一个空格,再配合 trim() 就能实现“全清理”。
- 示例:
" a b\t\nc\n ".replaceAll("\\s+", " ").trim()→"a b c" - 如果只要处理纯空格(不含制表/换行),可用
" +"替代"\\s+" - 注意:replaceAll 使用正则,性能略低于 replace,但语义更清晰
更彻底的空格归一化:先 trim 再 replaceAll
实际业务中推荐组合使用,兼顾首尾清理与中间压缩:
立即学习“Java免费学习笔记(深入)”;
str == null ? "" : str.trim().replaceAll("\\s+", " ")- 若需保留换行逻辑(比如富文本预处理),可改用
"[ \\t\\f]+"排除 \n\r - Apache Commons Lang 提供了
StringUtils.normalizeSpace(str),功能等价且自动判空,可直接引入依赖使用
基本上就这些。不复杂但容易忽略的是:空格类型不止 ' ',还有各种不可见字符,用 \\s+ 更稳妥;而过度依赖 replace(" ", "") 可能误删有效空格,得不偿失。










