如何将"\\ r \\n"更改为java中的行分隔符

r0d*_*ney 1 java regex newline terminal-emulator

我正在研究一个学校项目来构建一个伪终端和文件系统.终端正在扫描System.in并将字符串传递给控制器​​.

输入到控制台: abc\r\nabc\r\nabc

这是我试过的代码

Scanner systemIn = Scanner(System.in);
input = systemIn.nextLine();
input = input.replaceAll("\\\\r\\\\n",System.getProperty("line.separator"));
System.out.print(input);
Run Code Online (Sandbox Code Playgroud)

我希望java将\ r \n我键入的控制台视为行分隔符,而不是实际的\和r.它现在做的是按原样打印输入.

期望的输出:

ABC

ABC

ABC

更新:我试过input = StringEscapeUtils.unescapeJava(input);,它解决了这个问题.

Ber*_*rgi 5

你需要在java中双重转义正则表达式(一次用于正则表达式反斜杠,一次用于Java字符串).你不想要一个换行符(/\n/,"\\n"),但是反斜杠(/\\/)加上一个"n": /\\n/, "\\\\n".所以这应该工作:

input.replaceAll("(\\\\r)?\\\\n", System.getProperty("line.separator"));
Run Code Online (Sandbox Code Playgroud)

有关转义序列的更广泛处理,请参阅如何在Java中取消Java字符串文字?