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










