Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“如何改变”\\r\\n";java中的行分隔符_Java_Regex_Newline_Terminal Emulator - Fatal编程技术网

“如何改变”\\r\\n";java中的行分隔符

“如何改变”\\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

我正在做一个学校的项目,以建立一个伪终端和文件系统。终端正在扫描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);
我希望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会将它们读作反斜杠。我的意思是,我想手动在字符串中输入行分隔符,如say
echo abc\r\nabc
,然后打印出来。应该是两行而不是“abc”\r\nabc“您发布的方法得到的结果是什么,与您想要达到的结果有什么不同?是的,我希望java将\r\n视为行分隔符,而不是实际的反斜杠,请注意,
nextLine
将返回不带换行标记的行,除非系统行分隔符与您正在读取的内容不匹配。如果输入反斜杠,java会将它们读作反斜杠。我的意思是,我想手动在字符串中输入行分隔符,如say
echo 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的行为。论李