“如何改变”\\r\\n";java中的行分隔符
我正在做一个学校的项目,以建立一个伪终端和文件系统。终端正在扫描System.in并将字符串传递给控制器 控制台输入:“如何改变”\\r\\n";java中的行分隔符,java,regex,newline,terminal-emulator,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(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);
我希望java将我在console中键入的\r\n作为行分隔符,而不是实际的\r\n和。
它现在做的是按原样打印输入
所需输出:
abc
abc
abc
更新:我尝试了
input=StringEscapeUtils.unescapeJava(input)代码>解决了问题。对于一致的行为,我将用\r替换\\r,用\n替换\\n,而不是用换行符替换\\r\\n,因为这在不同的系统上会有不同的行为
你能行
input = systemIn.nextLine().replaceAll("\\\\r", "\r").replaceAll("\\\\n", "\n");
nextLine()在结尾处删除换行符。如果要添加行分隔符,可以执行以下操作
input = systemIn.nextLine() + System.getProperty("line.separator");
如果您使用的是println(),则无需将其重新添加
System.out.println(systemIn.nextLine()); // prints a new line.
对于一致的行为,我将用\r替换\\r,用\n替换\\n,而不是用换行符替换\\r\\n,因为这在不同的系统上会有不同的行为
你能行
input = systemIn.nextLine().replaceAll("\\\\r", "\r").replaceAll("\\\\n", "\n");
nextLine()在结尾处删除换行符。如果要添加行分隔符,可以执行以下操作
input = systemIn.nextLine() + System.getProperty("line.separator");
如果您使用的是println(),则无需将其重新添加
System.out.println(systemIn.nextLine()); // prints a new line.
您需要在java中双重转义正则表达式(一次用于正则表达式反斜杠,一次用于java字符串)。您不需要换行符(/\n/
,“\\n”
),而是反斜杠(/\\/
)加上一个“n”:/\\n/
,“\\\\n”
。因此,这应该是可行的:
input.replaceAll("(\\\\r)?\\\\n", System.getProperty("line.separator"));
有关转义序列的更广泛的处理,请参见您需要在java中对正则表达式进行双重转义(一次用于正则表达式反斜杠,一次用于java字符串)。您不需要换行符(/\n/
,“\\n”
),而是反斜杠(/\\/
)加上一个“n”:/\\n/
,“\\\\n”
。因此,这应该是可行的:
input.replaceAll("(\\\\r)?\\\\n", System.getProperty("line.separator"));
有关转义序列的更广泛处理,请参见如果您的输入包含字符串'\r\n',请尝试以下操作
Scanner systemIn = Scanner(System.in);
input = systemIn.nextLine();
input = input.replaceAll("\\\\r\\\\n",System.getProperty("line.separator"))
如果您的输入包含字符串“\r\n”,请尝试此操作
Scanner systemIn = Scanner(System.in);
input = systemIn.nextLine();
input = input.replaceAll("\\\\r\\\\n",System.getProperty("line.separator"))
除非您实际上是在控制台中键入\和\r\n,否则根本不需要这样做:相反,您有一个很大的误解。CR字符在字符串中表示为\r,但它仅由一个十六进制值为0xD的字节组成。如果您在控制台中输入反斜杠,简单的答案是“不要”。只需按回车键:这就是它的用途。它会将CR字节传输到您的代码中。除非您实际上在控制台中键入\r和\n,否则您根本不需要这样做:相反,您有一个严重的误解。CR字符在字符串中表示为\r,但它仅由一个十六进制值为0xD的字节组成。如果您在控制台中输入反斜杠,简单的答案是“不要”。只需按回车键:这就是它的用途。它会将CR字节传输到您的代码中。正如r0dney所提到的,Bergi的解决方案不起作用
使用一些第三方库的能力是好的,但是对于学习第三方库的人来说,最好了解理论,因为并非每个问题都存在一些第三方库
大量的第三方库使项目过载,这些库可以在一行代码中解决任务,这使得项目庞大且不易维护。不管怎么说,这就是有效的方法:
content.replaceAll("(\\\\r)?\\\\n", System.getProperty("line.separator"));
正如r0dney所提到的,Bergi的解决方案不起作用
使用一些第三方库的能力是好的,但是对于学习第三方库的人来说,最好了解理论,因为并非每个问题都存在一些第三方库
大量的第三方库使项目过载,这些库可以在一行代码中解决任务,这使得项目庞大且不易维护。不管怎么说,这就是有效的方法:
content.replaceAll("(\\\\r)?\\\\n", System.getProperty("line.separator"));
请注意,nextLine
将返回不带换行符的行,除非系统行分隔符与您正在阅读的内容不匹配。如果您输入反斜杠,java会将它们读作反斜杠。我的意思是,我想手动在字符串中输入行分隔符,如sayecho abc\r\nabc
,然后打印出来。应该是两行而不是“abc”\r\nabc“您发布的方法得到的结果是什么,与您想要达到的结果有什么不同?是的,我希望java将\r\n视为行分隔符,而不是实际的反斜杠,请注意,nextLine
将返回不带换行标记的行,除非系统行分隔符与您正在读取的内容不匹配。如果输入反斜杠,java会将它们读作反斜杠。我的意思是,我想手动在字符串中输入行分隔符,如sayecho abc\r\nabc
,然后打印出来。它应该是两行而不是“abc”\r\nabc“您发布的方法得到的结果是什么,与您想要达到的结果有什么不同?是的,我希望java将\r\n视为行分隔符,而不是实际的反斜杠,请阅读问题和评论。@r0dney:真的吗?你忘了那个任务了吗(我忘了)?@Bergi:没有。我在eclipse中跨过一步,replaceAll对string@Bergi:但我尝试了StringEscapeUtils.unescapeJava()
,非常感谢您的提醒。@r0dney:真的吗?你忘了那个任务了吗(我忘了)?@Bergi:没有。我在eclipse中跨过一步,replaceAll对string@Bergi:但我尝试了StringEscapeUtils.unescapeJava()
,效果非常好,谢谢您的提醒。您对我在这里要实现的目标有很大误解。这个想法是模仿echo的行为。在Linux上,我可以执行echo“abc\nabc\n”,它将被识别。您对我在这里要实现的目标有很大的误解。这个想法是模仿echo的行为。论李