以下 Java 7+ 解决方案具有主要优势。
private static void searchForName() throws IOException {
System.out.println("Please enter the name you would like to search for: ");
Scanner kb = new Scanner(System.in);
String name = kb.nextLine();
List<String> lines = Files.readAllLines(Paths.get("leaders.txt"));
for (String line : lines) {
if (line.contains(name)) {
System.out.println(line);
}
}
}
它不比这个答案中的代码短。要点是,当我们打开 a 时,File
我们有一个开放的资源,我们必须关心关闭它。否则可能会造成资源泄漏。
从 Java 7 开始,try-with-resources 语句处理资源的关闭。所以打开一个Scanner
由文件支持的文件看起来像这样:
try (Scanner scanner = new Scanner("leaders.txt")) {
// using scanner
}
使用Files.readAllLines
我们不需要关心关闭文件,因为这个方法(JavaDoc)
确保在读取所有字节或抛出 I/O 错误或其他运行时异常时关闭文件。
如果String
只需要 a 的第一次出现,则以下 Java 8+ 代码只需几行即可完成工作:
protected static Optional<String> searchForName(String name) throws IOException {
try (Stream<String> lines = Files.lines(Paths.get("leaders.txt"))) {
return lines.filter(line -> line.contains(name)).findFirst();
}
}
它返回一个Optional
指示可能有一个空结果。我们使用它,即如下:
private static void searchForName() throws IOException {
System.out.println("Please enter the name you would like to search for: ");
Scanner kb = new Scanner(System.in);
String name = kb.nextLine();
Optional<String> result = searchForName(name);
result.ifPresent(System.out::println);
}