目前,我正在创建一个控制台程序,该程序使用java Scanner读取具有很长字符串的一行
样本数据更像这样
一行中有50000个整数,中间用空格隔开,
"11 23 34 103 999 381 ....." until 50000 integer
用户通过控制台而不是从文件输入此数据
这是我的代码
System.out.print("Input of integers : ");
Scanner sc = new Scanner(System.in);
long start = System.currentTimeMillis();
String Z = sc.nextLine();
long end = System.currentTimeMillis();
System.out.println("String Z created in "+(end-start)+"ms, Z character length is "+Z.length()+" characters");
然后我执行,结果我得到了
String Z created within 49747ms, Z character length is 194539 characters
我的问题是为什么要花很长时间?
有没有更快的方法来读取很长的字符串?
我已经尝试过缓冲读取器,但是没有太大区别。
String Z created within 41881ms, Z character length is 194539 characters
最佳答案
看来扫描器使用正则表达式来匹配行尾-这很可能导致效率低下,尤其是因为您将正则表达式与长度为200k的String匹配时。
有效使用的模式是。*(\ r \ n | [\ n \ r \ u2028 \ u2029 \ u0085])|。+ $
关于java - 使用Java Scanner从控制台读取一个很长的字符串需要时间吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8228029/