Java中处理字符串多余空格需区分首尾与中间:trim()仅去首尾空白,replaceAll("\s+", " ")压缩中间连续空白为单空格;推荐组合使用trim().replaceAll("\s+", " ")或Apache Commons的StringUtils.normalizeSpace()。
Java中处理字符串多余空格,核心是区分“首尾空格”和“中间多余空格”——trim()只去首尾,正则替换才能压缩中间多个空格为一个。
String.trim() 是最基础也最安全的方式,它会移除字符串开头和结尾的所有 Unicode 空白字符(包括空格、制表符、换行符等),但不会动中间的空格。
用 replaceAll("\s+", " ") 可把连续的空白字符(空格、制表、换行等)统一替换成一个空格,再配合 trim() 就能实现“全清理”。
" a b\t\nc\n ".replaceAll("\\s+", " ").trim() → "a b c"
" +" 替代 "\\s+"
实际业务中推荐组合使用,兼顾首尾清理与中间压缩:
str == null ? "" : str.trim().replaceAll("\\s+", " ")"[ \\t\\f]+" 排除 \n\rStringUtils.normalizeSpace(str),功能等价且自动判空,可直接引入依赖使用基本上就这些。不复杂但容易忽略的是:空格类型不止 ' ',还有各种不可见字符,用 \\s+ 更稳妥;而过度依赖 replace(" ", "") 可能误删有效空格,得不偿失。