You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将字符串内制表符替换为单个空格且保留换行符

问题根源
  • 正则\\s+中的\s匹配范围覆盖了所有空白字符:除了空格、制表符之外,还包含换行符\n、回车符\r、垂直制表符、换页符等,因此会把原本的换行结构替换成空格,不符合预期。
  • 正则[\\t ]仅能匹配单个制表符或单个空格,没有指定匹配连续多个字符的量词,因此连续出现的制表符、空格会被逐个替换为空格,最终仍然是连续的多个空格,达不到合并效果。
实现方案

核心逻辑是限定匹配范围:仅匹配连续的普通空格和制表符,完全排除换行、回车等需要保留的字符,将匹配到的连续内容替换为单个空格即可。

基础版本(仅合并连续空格/制表符、保留换行、不处理行首行尾空白)

直接使用如下代码即可满足核心需求:

String result = myStr.replaceAll("[ \\t]+", " ");

正则说明:

  • [ \\t]:限定匹配字符集为普通空格、制表符\t
  • +:表示匹配前面字符集的内容1次或多次,确保连续的多个空格/制表符会被一次性替换

适配示例输出的版本(额外去除每行首尾多余空白)

如果需要和给出的示例效果完全一致(行首无多余空格、行尾无多余空格,同时保留换行结构),可以在基础版本上增加行首尾空白清理逻辑,开启多行匹配模式即可:

// 第一步:合并所有连续的空格、制表符为单个空格,不修改换行
String step1 = myStr.replaceAll("[ \\t]+", " ");
// 第二步:开启多行模式(?m),匹配每一行开头、结尾的多余空格并删除
String result = step1.replaceAll("(?m)^ | $", "");

用提供的测试用例运行后,输出结果完全符合预期:

Hello World!
New line

内容的提问来源于stack exchange,提问作者Meffapefecy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 10:42:22