【发布时间】:2012-03-26 10:00:42
【问题描述】:
好吧,这可能是一个愚蠢的问题。
我只想更快地解决以下问题
我想在一行中输入三个整数,例如:
10 34 54
一种方法是制作一个 BufferedReader 然后使用 readLine() 它将整行读取为字符串 然后我们可以使用 StringTokenizer 来分隔三个整数。 (实施缓慢)
另一种方法是使用“扫描仪”并通过 nextInt() 方法获取输入。 (比以前的方法慢)
我想要一个快速的实现来接受这种类型的输入,因为我必须阅读超过 2,000,000 行并且这些实现非常慢。
我的实现:
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
for(i=0;i<n;i++) {
str=br.readLine();
st = new StringTokenizer(str);
t1=Integer.parseInt(st.nextElement().toString());
t2=Integer.parseInt(st.nextElement().toString());
z=Long.parseLong(st.nextElement().toString());
}
这个循环了n次。 ( n 是条目数)
由于我知道每一行将只包含三个整数,因此无需检查 hasMoreElements()
【问题讨论】:
-
有多慢?您能否发布一些您使用的示例代码以及时间?
-
您可以使用 BufferedReader 并进行自己的解析,专门收集 N 个字符,直到您看到一个空白或字符串的结尾。这可能会更快。请注意,通过使用 BufferedReader 和更大的缓冲区(10kB 已经有很大帮助),您将在所有情况下获得更好的性能。
-
@SteveMcLeod 我在一个编程网站上使用了这种方法,但超出了时间限制。所以我认为会有更好的方法来做到这一点。
-
读取 > 200k 文本行并从中解析出三个整数总是不太理想。最好只执行一次,然后存储数据的二进制(流?)版本,并在下次使用。
-
@TheBlastOne 你能提供一个示例实现吗?我想你问错了。每行包含三个整数。