2017-10-12 63 views
4

谁能告诉我这是为什么正常工作:如何从用户输入中分割“ n”?

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

当我想从用户一样获得数据:

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 

为什么它没有在第一个例子中分裂样的呢?

+0

你试过拆分(“\ n \ r”)吗? – sai

+0

您是否尝试过拆分(“\\ n”)? – GregaMohorko

回答

6

的区别在于\nString字面"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.

0

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

在第一示例wanttosplit包含一个换行字符(因为Java编译器已经取代了图案“\ n”与单个字符表示换行。

0

要分割AAT用户输入\n需要在\\n拆分因为Java会挑\n作为新行字符。 为此如果添加另一个\\n爪哇将难逃换行字符,并在实际的文本,而不是分裂\n

0

看起来像你从字面上输入“\”和' n'通过控制台?扫描仪将不会清除该序列,而是将其作为原样。

当从扫描仪获取输入你也不需要分割线,因为扫描仪下一个表演时总是给你一条线()

如果你想从用户读取多行,你应该调用next()多次。