
本文详解在不同java版本中安全、高效地移除字符串中的各类换行符(包括`\n`、`\r`、`\r\n`),涵盖正则匹配原理、跨平台兼容性处理及常见陷阱规避。
在处理用户输入、文件读取或模板字符串时,字符串中常混入不可见的换行符(即“硬回车”),如 \n(Unix/Linux/macOS)、\r(旧版Mac)、或 \r\n(Windows)。若仅用 replaceAll("\\r\\n", ""),将无法覆盖所有情况——例如,单个 \n 或孤立的 \r 会被遗漏,导致清理不彻底。
✅ 正确做法:匹配所有常见换行序列
推荐使用统一正则表达式匹配并替换所有换行控制符:
String input = "strengthened columns \nwith GRPES\r\n";
String cleaned = input.replaceAll("\\r\\n|\\r|\\n", "");
System.out.println(cleaned); // 输出:strengthened columns with GRPES该正则 \r\n|\r|\n 按优先级顺序匹配:
- 先尝试 \r\n(Windows风格),
- 再匹配单独 \r(避免误吞 \r\n 中的 \r),
- 最后匹配 \n(Unix/Linux/macOS)。
? 更简洁写法(等效):input.replaceAll("[\\r\\n]+", "") 使用字符类 [\\r\\n] 可一次性匹配任意组合的回车/换行,并通过 + 合并连续换行(如 \n\r\n),适合多数场景。
⚠️ 注意事项与常见误区
- 不要只替换 \r\\n:原始代码 replaceAll("\\r\\n", "") 仅处理CRLF,对纯 \n(如Java多行字符串字面量、Linux文本)完全无效;
- Java 13+ 文本块需额外注意:若使用三重引号文本块("""..."""),其内部换行默认为 \n(JLS规定),此时 replaceAll("\\n", "") 即可,但仍建议用 [\\r\\n]+ 以保持健壮性;
- 避免使用 trim():trim() 仅去除首尾空白,对中间换行符无效;
- 性能提示:对超长字符串,可考虑 StringBuilder 手动遍历(极少需要),但正则方案在绝大多数业务场景中性能足够且可读性强。
✅ 推荐工业级写法(兼容 Java 7+)
public static String removeLineBreaks(String str) {
if (str == null) return null;
return str.replaceAll("[\\r\\n]+", "");
}
// 使用示例
String in = "strengthened columns \nwith GRPES\r\n";
System.out.println(removeLineBreaks(in)); // strengthened columns with GRPES此方法零依赖、无版本限制、语义清晰,适用于从 Java 7 到 Java 21 的所有主流环境,是生产代码中的首选实践。
立即学习“Java免费学习笔记(深入)”;










