看似好多大牛都写这种,是不是这就是传说中的 Java 输入输出外挂!!!

今天翻别人写的代码的时候无意中发现了这个,TA 写的 Java 版本的代码中,好多都用了这个。让我稍微看看这究竟是何方神圣。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
InputReader reader;
PrintWriter writer;
Main() {
reader = new InputReader();
writer = new PrintWriter(System.out);
}
public static void main(String[] args) {
new Main().run();
}
public void run() {
try {
// main
} catch (IOException ex) {
}
writer.close();
}
}
class InputReader {
BufferedReader reader;
StringTokenizer tokenizer;
InputReader() {
reader = new BufferedReader(new InputStreamReader(System.in));
tokenizer = new StringTokenizer("");
}
String next() throws IOException {
while (!tokenizer.hasMoreTokens()) {
tokenizer = new StringTokenizer(reader.readLine());
}
return tokenizer.nextToken();
}
Integer nextInt() throws IOException {
return Integer.parseInt(next());
}
}

这段代码重写了 Java 的输入流的 nextInt() 方法,通过一个 StringTokenizer 类来实现相应的功能。

StringTokenizer 是一个用来分隔 String 的应用类,相当于 VB 的 split 函数。这里还是不过分介绍了。具体介绍还是查看另一篇日志吧Java类StringTokenizer的说明

这样一来,整个代码的输入过程就很明确了,通过StringTokenizer类中的方法来分割字符串,然后将字符串粘贴为对应的数据类型返回。

参考文献