How split "\n" from user input?

时间:2017-10-12 10:20:39

标签: java string split

Can anyone tell me why this is working well:

String wanttosplit = "asdf...23\n..asd12";
String[] i = wanttosplit.split("\n");
output are:
i[0] = asdf...23
i[1] = ..asd12

When i want to get the data from user like:

import java.util.Scanner;
Scanner scan = new Scanner(System.in);
String wanttosplit = scan.next(); //user enter asdf...23\n..asd12 on the       keyboard
String[] i = wanttosplit.split("\n");
output are:
i[0] = asdf...23\n..asd12

Why it didnt split like in first example?

4 个答案:

答案 0 :(得分:6)

区别在于\n文字String中的"asdf...23\n..asd12"由Java编译器处理,而用户输入asdf...23\n..asd12则按原样传递给Scanner

Java编译器用换行符(LF)替换转义序列\n,该字符对应于UNICODE中的代码点10。另一方面,Scanner会向您传递两个单独的字符'\''n',因此当您将字符串传递给split方法时,它找不到LF代码点分离器。

您需要自己处理转义序列\n,例如,通过split传递一个识别它的正则表达式:

String[] i = wanttosplit.split("(?<!\\\\)\\\\n");

Demo.

答案 1 :(得分:0)

在第二个示例中,用户输入的字符串包含反斜杠后跟字母n,但传递给wanttosplit.split()的参数是包含换行符的单个字符串。

在第一个示例中,wanttosplit包含换行符(因为java编译器已将模式'\ n'替换为表示换行符的单个字符。

答案 2 :(得分:0)

要拆分用户输入\n,需要在\\n拆分,因为Java会选择\n作为换行符。 因此,如果您在\前面添加另一个\n,则java将转义换行符,而是拆分实际文本\n

答案 3 :(得分:0)

看起来你真的通过控制台输入'\'和'n'?扫描仪不会按照该顺序进行处理,而是将其视为原样。

从Scanner获取输入时,您也不需要分割线,因为Scanner在执行next()时始终会给您一行

如果您想从用户读入多行,则应多次调用next()。