【发布时间】:2014-07-24 20:52:06
【问题描述】:
我正在尝试将字符串中的任何换行符或转义换行符标准化为转义的 unix 换行符。我不知道为什么这不起作用:
Pattern EOL = Pattern.compile("(\\\\r)?\\\\n|\r?\n");
final String escapedEOL = "\\\\n";
System.out.println(EOL.matcher("asdf\njkl;").replaceAll(escapedEOL));
System.out.println(EOL.matcher("asdf\n").replaceAll(escapedEOL));
System.out.println(EOL.matcher("asdf\r\njkl;").replaceAll(escapedEOL));
System.out.println(EOL.matcher("asdf\r\n").replaceAll(escapedEOL));
System.out.println(EOL.matcher("asdf\\r\\njkl;").replaceAll(escapedEOL));
System.out.println(EOL.matcher("asdf\\r\\n").replaceAll(escapedEOL));
结果:
asdf\njkl;
asdf
asdf\njkl;
asdf\n
asdf\njkl;
asdf\n
Done
任何人都可以对此有所了解吗? 我意识到我可以把它分成两个电话,但现在我很好奇......
编辑: 看起来我应该更加努力地搜索similar problems。看起来在 Java 7 中应该避免使用带有组的量词。
Pattern EOL = Pattern.compile("\\\\n|\\\\r\\\\n|\r?\n")
也可以。
【问题讨论】:
-
我在 Java 8 pastebin.com/wHfvMz01 上得到了不同的结果。
-
啊,这是
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)...不幸的是我不能升级到8。
标签: java regex replaceall