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);,它解决了这个问题.
你需要在java中双重转义正则表达式(一次用于正则表达式反斜杠,一次用于Java字符串).你不想要一个换行符(/\n/,"\\n"),但是反斜杠(/\\/)加上一个"n": /\\n/, "\\\\n".所以这应该工作:
input.replaceAll("(\\\\r)?\\\\n", System.getProperty("line.separator"));
Run Code Online (Sandbox Code Playgroud)
有关转义序列的更广泛处理,请参阅如何在Java中取消Java字符串文字?