繁体   English   中英

从文本文件中打印单词

[英]Printing words from text file

我现在有这个程序,它运行一个 txt 文件并打印文件中以 A 或 T 开头的行。现在我正在努力让它只打印以一个结尾的单词,或; 有人认为他们可以帮助我吗?

这是我的程序

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String args[]) throws IOException {
        Scanner sf = new Scanner(new File("amazing.txt")); 
        List<String> text = new ArrayList<>();

        while (sf.hasNextLine()) {
            String current = sf.nextLine(); 
            if (current.startsWith("T") || current.startsWith("A")) {
                System.out.println(current);
            }
        }
        sf.close(); 
    }
}

使用String#endsWith吗?

while (sf.hasNextLine()) {
    String current = sf.nextLine(); 
    if (current.endsWith(",") || current.endsWith(";"))
        System.out.println(current);
}

稍微复杂一点的解决方案可能是使用正则表达式匹配来执行此检查:

while (sf.hasNextLine()) {
    String current = sf.nextLine(); 
    if (current.matches(".*[,;]\\s*"))
        System.out.println(current);
}

这将检查每一行是否以逗号或分号结尾,之后可能带有一些空格。

@TimBiegeleisen已经提供了一个很好的答案。

为了完整起见,让我还提供一个基于流的解决方案,该解决方案使用NIO (Javas newer,modern File API),它正在使用他的检查:

Files.lines(Path.of("amazing.txt"))
    .filter(line -> line.matches(".*[,;]\\s*"))
    .forEach(System.out::println);

由于Path.of ,该代码至少需要 Java 11 。 或者 Java 8 如果您使用Paths.get("amazing.txt")代替。


如果您打算将这些行添加到text而不是打印它们,您可以轻松修改代码:

Files.lines(Path.of("amazing.txt"))
    .filter(line -> line.matches(".*[,;]\\s*"))
    .forEach(text::add);

或者让 stream 自己创建列表,那么您不必这样做:

List<String> text = Files.lines(Path.of("amazing.txt"))
    .filter(line -> line.matches(".*[,;]\\s*"))
    .collect(Collectors.toList());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM