Java如何用正则拆分所有换行符?解决Swing字符串拆分问题
解决换行符拆分的尾换行问题
首先,你提到的\\r?\\n其实是适配绝大多数平台换行符(Windows的\r\n、Unix/Linux/macOS的\n)的正确正则,之所以在Swing组件获取的字符串上拆分失效,核心问题不是正则,而是String.split()的默认参数行为在搞鬼!
问题根源
当你调用text.split("\\r?\\n")时,Java的split方法默认会忽略结果末尾的空字符串。如果你的文本末尾带有换行符(比如Swing组件中用户输入最后敲了回车),这部分空行就会被丢弃,导致你看起来像是“无法识别换行”,但实际上是拆分结果丢了最后一段。
解决方案
只需要给split方法加上第二个参数-1,它会强制保留所有拆分结果,包括末尾的空字符串:
String[] lines = text.split("\\r?\\n", -1);
举个直观的对比例子:
- 假设文本内容是:
"第一行\n第二行\n"(末尾带有换行) - 用
split("\\r?\\n")得到:["第一行", "第二行"](丢失了末尾的空行) - 用
split("\\r?\\n", -1)得到:["第一行", "第二行", ""](完整保留所有行,包括末尾的空行)
关于你尝试的Pattern.MULTILINE方案
其实完全不需要用多行模式匹配来绕路,上面的split参数调整就足以解决问题。如果一定要用正则匹配行的方式,也可以实现,但效率不如直接拆分:
Pattern pattern = Pattern.compile(".*", Pattern.MULTILINE); Matcher matcher = pattern.matcher(text); List<String> lines = new ArrayList<>(); while (matcher.find()) { lines.add(matcher.group()); }
不过显然split的方式更简洁高效。
内容的提问来源于stack exchange,提问作者StephanM
相关产品推荐
相关产品推荐

