应使用replaceall("\s+", " ")将连续空白符压缩为单个空格,再链式调用.trim()去除首尾空格;不可用\s单独替换,否则无法真正压缩空白。

用 String.replaceAll() 将所有连续空白符(包括空格、制表符、换行符、回车等)替换为单个空格,关键在于正则表达式要能匹配“一个或多个空白字符”,然后统一替换成一个空格。
正则表达式用 \s+
\s 是 Java 正则中表示任意空白字符的预定义字符类,涵盖: (空格)、 (制表符)、
(换行)、
(回车)、(换页)等。+ 表示“一个或多个”,所以 \s+ 能精准匹配任意长度的连续空白序列。
示例代码:
String text = " hello
world ";
String cleaned = text.replaceAll("\s+", " ");
// 结果: " hello world "(首尾各一个空格)
去掉首尾空格可链式调用 trim()
如果希望结果不带开头和结尾的空格,直接在后面加 .trim():
String cleaned = text.replaceAll("\s+", " ").trim();
// 结果:"hello world"
注意:不要用 \s 单独匹配再替换
写成 replaceAll("\s", " ") 会把每个空白符都替换成一个空格,导致多个空格并存(比如 "
" → " "),无法真正“压缩”空白。必须用 \s+ 才能一次匹配整个空白块。
进阶:只处理 ASCII 空白(避免 Unicode 分隔符干扰)
默认 \s 在 Java 中等价于 [
](Java 8+),不包含 Unicode 分隔符(如 、 )。如需严格限定,可显式写成:
-
replaceAll("[ \t\n\x0B\f\r]+", " ")—— 更明确,兼容性更强 - 若需支持 Unicode 空白(如 ),改用
\p{Z}或组合,但一般场景不需要










