str.replaceAll()不匹配" \ r \ n"

时间:2017-02-07 11:02:48

标签: java

我试图将多行字符串中的Unix样式的行结尾(LF)转换为Windows样式(CR LF)。

我的攻击计划是:

  • 仅使用CR LF
  • 替换所有LF个实例
  • 然后用LF
  • 替换所有CR LF个实例

但是,这段代码与"\r\n"不匹配:

String test = "test\r\ncase";
test.replaceAll("\r\n","\n");

PrintWriter testFile = new PrintWriter("test.txt");
testFile.print(test);
testFile.close();

我已经尝试过使用双/三/四反斜杠。没有骰子。

我也知道test字符串不包含文字\r\n,因为它在打印到文件时会将其检测为CR LF

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您没有从代码中获取修改后的字符串。

字符串是不可变的,因此您需要保存replaceAll的返回值。没有方法可以更改String

的实例
String test = "test\r\ncase";

//Print the character before
for(char c : test.toCharArray()){ System.out.print((int)c + " ");};
System.out.println();

//Save the replace result
test = test.replaceAll("\r\n","\n");

//Print the character after
for(char c : test.toCharArray()){ System.out.print((int)c + " ");};

显示测试首先未更改然后更改

116 101 115 116 13 10 99 97 115 101 //BEFORE
116 101 115 116 10 99 97 115 101    //AFTER