如何从用户输入中分割“\ n”?
问题描述:
谁能告诉我这是为什么正常工作:如何从用户输入中分割“ 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
为什么它没有在第一个例子中分裂样的呢?
答
的区别在于\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");
答
在你的第二个例子中,用户输入的字符串包含反斜杠后跟字母n,但传递给wanttosplit.split()的参数是包含换行符的单个字符串。
在第一示例wanttosplit包含一个换行字符(因为Java编译器已经取代了图案“\ n”与单个字符表示换行。
答
要分割AAT用户输入\n
需要在\\n
拆分因为Java会挑\n
作为新行字符。 为此如果添加另一个\
盈\n
爪哇将难逃换行字符,并在实际的文本,而不是分裂\n
答
看起来像你从字面上输入“\”和' n'通过控制台?扫描仪将不会清除该序列,而是将其作为原样。
当从扫描仪获取输入你也不需要分割线,因为扫描仪下一个表演时总是给你一条线()
如果你想从用户读取多行,你应该调用next()多次。
你试过拆分(“\ n \ r”)吗? – sai
您是否尝试过拆分(“\\ n”)? – GregaMohorko