使用Java基于新行的分离linux终端输入。

问题描述 投票:1回答:1

我试图将终端输入分离成一个基于新行的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?

它没有分开打印行数... 而是全部打印在一行中.

请提供您的建议。

java linux split newline user-input
1个回答
0
投票

它应该是与 \\\\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);
}

0
投票

作为 split 以正则表达式为参数,回车字符需要进行转义以符合字符的字面意思。

String[] lines = initial_input.split("(\\\\r)?\\\\n");

0
投票

你似乎对正则表达式和文本有一些误解。

就像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 键盘上的键。

你的代码实际上是把一个文本分割成几行,但你的输入只有一行。

你可以从一个有几行文字的文件中读取,或者将一行文字分割成一些字符串,以 backslashn 字符作为分隔符。

© www.soinside.com 2019 - 2024. All rights reserved.