繁体   English   中英

如何从用户输入中分割出“\\ n”?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM