
本文详解在不同 java 版本中安全、可靠地移除字符串中的换行符(包括 \n、\r\n、\r),指出常见误区,并提供兼容性高、鲁棒性强的正则替换方案。
在处理用户输入、读取文件或解析多行文本时,字符串中常包含不可见的换行符(即“硬回车”),如 \n(Unix/Linux/macOS)、\r\n(Windows)或极少数情况下的 \r(旧版 Mac)。若仅用 replaceAll("\\r\\n", ""),将无法覆盖所有平台场景——例如,Linux 生成的文本只含 \n,而 Windows 文本含 \r\n;若字符串末尾还有孤立的 \r,该方案也会遗漏。
正确的做法是统一匹配所有常见的行终止符变体。推荐使用以下正则表达式:
in = in.replaceAll("\\r\\n|\\r|\\n", "");该正则通过 |(或逻辑)覆盖全部三种主流换行序列,确保跨平台健壮性。例如:
String in = "strengthened columns \r\nwith GRPES\r";
in = in.replaceAll("\\r\\n|\\r|\\n", "");
System.out.println(in); // 输出:strengthened columns with GRPES⚠️ 注意事项:replaceAll() 使用的是正则表达式,因此反斜杠需双写(如 \\n),而不能写作 \n(那会被 Java 当作字面换行符编译,导致语法错误或行为异常);若目标是仅移除首尾空白与换行(保留中间空格),应改用 trim() 配合上述替换,或使用 in.strip().replaceAll("\\r\\n|\\r|\\n", " ") 实现更精细控制;Java 11+ 可考虑 String::strip 或 String::lines() 流式处理(如 in.lines().collect(Collectors.joining(" "))),但其语义为“按行分割后拼接”,不等价于直接删除换行符(会额外压缩连续空白);对于 Java 7/8 等旧版本,上述正则方案完全兼容,无需依赖新 API。
总结:不要假设换行符格式单一;始终用 \\r\\n|\\r|\\n 全面匹配,兼顾可移植性与可靠性。这是处理字符串换行问题最简洁、最通用的工程实践。
立即学习“Java免费学习笔记(深入)”;










