我正在尝试使用 JDK 8 用 Java 编写一个 Concordance 程序(以重新学习该语言)。到目前为止,我有以下内容(省略了包名):
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static Map<String,Integer> generateConcordance(String fileName) throws IOException {
Map<String,Integer> concordance = new HashMap<>();
for (String line : Files.readAllLines(Paths.get(fileName))) {
for (String word : line.split("[\\p{Punct}\\s]+")) {
concordance.merge(word, 1, Integer::sum);
}
}
return concordance;
}
public static void main(String[] args) {
if (args.length == 0) {
System.err.println("invalid operation - you must specify an input file");
} else {
try {
Map<String, Integer> concordance = generateConcordance(args[0]);
concordance.forEach((key,value) -> System.out.println(key + "\t" + value));
} catch (IOException error) {
System.err.println("I/O error - unable to read the file: " + args[0]);
}
}
}
}
这可行,但我想概括实现,以便能够在System.in
没有传递参数的情况下读取输入。是否可以修改函数的输入以generateConcordance
允许将其应用于命名文件或System.in
?