目前,我正在创建一个控制台程序,该程序使用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/

10-09 01:14