使用字符串中的\ n查找并替换所有NewLine或BreakLine字符 - 与平台无关

时间:2013-11-11 15:10:50

标签: java regex string

我正在寻找一种正确而强大的方法来查找和替换来自newline的所有breaklineString字符,而不依赖于\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后面。

3 个答案:

答案 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.