我刚刚学习了Java的Scanner类,现在我想知道它如何与StringTokenizer和String.Split进行比较/竞争.我知道StringTokenizer和String.Split只适用于字符串,那么为什么我要将扫描器用于字符串呢?Scanner只是打算一站式购物吗?
我有一个文本文件包含1 000 002以下编号中的数字:
123 456
1 2 3 4 5 6 .... 999999 100000
Run Code Online (Sandbox Code Playgroud)
现在我需要读取该数据并将其分配给int变量(前两个数字)和其余所有(1 000 000个数字)到一个数组int[].
这不是一项艰巨的任务,但是 - 它的速度非常慢.
java.util.Scanner: Scanner stdin = new Scanner(new File("./path"));
int n = stdin.nextInt();
int t = stdin.nextInt();
int array[] = new array[n];
for (int i = 0; i < n; i++) {
array[i] = stdin.nextInt();
}
Run Code Online (Sandbox Code Playgroud)
它作为例外工作,但执行大约需要7500毫秒.我需要在几百毫秒内获取该数据.
java.io.BufferedReader:使用BufferedReader.readLine()和String.split()我在大约1700毫秒内得到了相同的结果,但它仍然太多了.
如何在不到1秒的时间内读取该数据量?最终结果应该等于:
int n …Run Code Online (Sandbox Code Playgroud) 在Java中,我使用标准Scanner和BufferedReader类进行输入,例如:
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
Run Code Online (Sandbox Code Playgroud)
或者
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int a=Integer.parseInt(br.readLine());
Run Code Online (Sandbox Code Playgroud)
但是像这样获取输入需要大量的运行时间。我想知道更快的获取输入的方法。提前致谢
编辑:我见过像 uwi 这样的顶级 java 程序员,他们以非常不同的方式接受输入。他们有点创建自己的读者类别。我不明白他们的程序如何在运行时变得更快。