我正在寻找一种正确而强大的方法来查找和替换来自newline
的所有breakline
或String
字符,而不依赖于\n
的任何操作系统平台。
这是我尝试过的,但效果并不好。
public static String replaceNewLineChar(String str) {
try {
if (!str.isEmpty()) {
return str.replaceAll("\n\r", "\\n")
.replaceAll("\n", "\\n")
.replaceAll(System.lineSeparator(), "\\n");
}
return str;
} catch (Exception e) {
// Log this exception
return str;
}
}
示例:
输入字符串:
This is a String
and all newline chars
should be replaced in this example.
预期输出字符串:
This is a String\nand all newline chars\nshould be replaced in this example.
但是,它返回了相同的输入String。就像它放置\ n并再次将其解释为Newline。
请注意,如果您想知道为什么有人想要\n
,那么用户就要特别要求将字符串放在XML后面。
答案 0 :(得分:28)
如果你想要文字\n
,那么下面应该有效:
String repl = str.replaceAll("(\\r|\\n|\\r\\n)+", "\\\\n")
答案 1 :(得分:2)
这似乎运作良好:
String s = "This is a String\nand all newline chars\nshould be replaced in this example.";
System.out.println(s);
System.out.println(s.replaceAll("[\\n\\r]+", "\\\\n"));
顺便说一下,你不需要捕捉异常。
答案 2 :(得分:2)
哦,当然,你可以用一行正则表达式做到这一点,但这有什么乐趣?
public static String fixToNewline(String orig){
char[] chars = orig.toCharArray();
StringBuilder sb = new StringBuilder(100);
for(char c : chars){
switch(c){
case '\r':
case '\f':
break;
case '\n':
sb.append("\\n");
break;
default:
sb.append(c);
}
}
return sb.toString();
}
public static void main(String[] args){
String s = "This is \r\n a String with \n Different Newlines \f and other things.";
System.out.println(s);
System.out.println();
System.out.println("Now calling fixToNewline....");
System.out.println(fixToNewline(s));
}
结果
This is
a String with
Different Newlines and other things.
Now calling fixToNewline....
This is \n a String with \n Different Newlines and other things.