我试图将终端输入分离成一个基于新行的Java代码。
这是我目前的代码。
Scanner sc = new Scanner(System.in);
String initial_input = sc.nextLine();
String[] lines = initial_input.split("\\r?\\n");
for (String line : lines) {
System.out.println(line);
}
这是我的输入。
INSERT KEY adam key\nTURN KEY adam\nENTER HOUSE adam\nINSERT KEY pat foobar\nTURN KEY pat\nENTER HOUSE pat\nWHO'S INSIDE?
它没有分开打印行数... 而是全部打印在一行中.
请提供您的建议。
它应该是与 \\\\n
Scanner sc = new Scanner(System.in);
String initial_input = sc.nextLine();
String[] lines = initial_input.split("\\\\n");
for (String line : lines) {
System.out.println(line);
}
作为 split
以正则表达式为参数,回车字符需要进行转义以符合字符的字面意思。
String[] lines = initial_input.split("(\\\\r)?\\\\n");
你似乎对正则表达式和文本有一些误解。
就像Reimeus之前说的,你必须用两个反斜杠再一次转义一次(\\\\n
). 这是因为你在键盘上输入的只是一行文字。
就在这里
INSERT KEY adam key\nTURN KEY adam\nENTER HOUSE adam\nINSERT KEY pat foobar\nTURN KEY pat\nENTER HOUSE pat\nWHO'S INSIDE?
这个输入只是一行。这些 \n
不是 newline
角色。它们只是两个独立的字符。其中一个包含 backslash
字符(代码0x5C),另一个则包含了 n
字符(代码0x6E)。
实际的 newline
字符只是一个单一的字符(代码0x0A),表示为 \n
在源代码中,因为真正的字符是不可见的(它只是一个新行的标记)。
另一方面。Scanner.nextLine()
只读一行,直到它找到了 newline
字符,即您在按下 ENTER
键盘上的键。
你的代码实际上是把一个文本分割成几行,但你的输入只有一行。
你可以从一个有几行文字的文件中读取,或者将一行文字分割成一些字符串,以 backslash
和 n
字符作为分隔符。