[英]How split “\n” from user input?
谁能告诉我为什么这个效果很好:
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
为什么它没有像第一个例子那样分裂?
区别在于String
文字"asdf...23\\n..asd12"
中的\\n
由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'替换为表示换行符的单个字符。
要分割用户输入\\n
您需要在\\\\n
分割,因为Java将选择\\n
作为换行符。 因此,如果你添加另一个\\
infront of \\n
java将转义换行符,而不是拆分实际文本\\n
看起来你真的通过控制台输入'\\'和'n'? 扫描仪不会对该序列进行处理,而是将其视为原样。
从Scanner获取输入时,您也不需要分割线,因为Scanner在执行next()时总是给您一行
如果要从用户读入多行,则应多次调用next()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.