谁能告诉我为什么这个效果很好:
String wanttosplit = "asdf...23\n..asd12";
String[] i = wanttosplit.split("\n");
output are:
i[0] = asdf...23
i[1] = ..asd12
Run Code Online (Sandbox Code Playgroud)
当我想从用户那里获取数据时:
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
Run Code Online (Sandbox Code Playgroud)
为什么它没有像第一个例子那样分裂?
不同之处在于\n,String文字"asdf...23\n..asd12"由Java编译器处理,而用户输入asdf...23\n..asd12则按Scanner原样传递.
Java编译器用\n换行符(LF)替换转义序列,该字符对应于UNICODE中的代码点10.Scanner,在另一方面,你传递两个单独的字符,'\'和'n',所以当你将这个字符串传递split方法,它没有找到LF代码点分隔符.
您需要自己处理转义序列\n,例如,通过传递split识别它的正则表达式:
String[] i = wanttosplit.split("(?<!\\\\)\\\\n");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
419 次 |
| 最近记录: |