Java 从文本文件打印单词

Java 从文本文件打印单词,java,file,match,Java,File,Match,我现在有一个程序,它运行一个txt文件并打印文件中以a或T开头的行。现在我正在制作它,以便它只打印以a或结尾的单词;有人认为他们能帮我吗 这是我的程序 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文件并打印文件中以a或T开头的行。现在我正在制作它,以便它只打印以a或结尾的单词;有人认为他们能帮我吗

这是我的程序

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(); 
    }
}
import java.io.*;
导入java.util.*;
公共班机{
公共静态void main(字符串args[])引发IOException{
Scanner sf=新扫描仪(新文件(“惊人的.txt”);
列表文本=新的ArrayList();
while(sf.hasNextLine()){
字符串电流=sf.nextLine();
if(当前.startsWith(“T”)| |当前.startsWith(“A”)){
系统输出打印项次(当前);
}
}
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);
}
Files.lines(Path.of("amazing.txt"))
    .filter(line -> line.matches(".*[,;]\\s*"))
    .forEach(System.out::println);
这将检查每一行是否以逗号或分号结尾,后面可能有一些空格。

使用
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);
}
Files.lines(Path.of("amazing.txt"))
    .filter(line -> line.matches(".*[,;]\\s*"))
    .forEach(System.out::println);
这将检查每一行是否以逗号或分号结尾,后面可能有一些空格。

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

为完整起见,我还提供了一个基于流的解决方案,该解决方案使用NIO(Javas较新的现代文件API),该解决方案正在使用他的检查:

while (sf.hasNextLine()) {
    String current = sf.nextLine(); 
    if (current.matches(".*[,;]\\s*"))
        System.out.println(current);
}
Files.lines(Path.of("amazing.txt"))
    .filter(line -> line.matches(".*[,;]\\s*"))
    .forEach(System.out::println);
代码至少需要Java 11,因为
Path.of
。或者Java8,如果您使用
path.get(“mazing.txt”)


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

Files.lines(Path.of("amazing.txt"))
    .filter(line -> line.matches(".*[,;]\\s*"))
    .forEach(text::add);
或者让流自己创建列表,那么您不必这样做:

List<String> text = Files.lines(Path.of("amazing.txt"))
    .filter(line -> line.matches(".*[,;]\\s*"))
    .collect(Collectors.toList());
List text=Files.line(Path.of(“惊人的.txt”))
.filter(行->行.matches(“.[,;]\\s*”)
.collect(Collectors.toList());
@TimBiegeleisen已经提供了一个很好的答案

为完整起见,我还提供了一个基于流的解决方案,该解决方案使用NIO(Javas较新的现代文件API),该解决方案正在使用他的检查:

while (sf.hasNextLine()) {
    String current = sf.nextLine(); 
    if (current.matches(".*[,;]\\s*"))
        System.out.println(current);
}
Files.lines(Path.of("amazing.txt"))
    .filter(line -> line.matches(".*[,;]\\s*"))
    .forEach(System.out::println);
代码至少需要Java 11,因为
Path.of
。或者Java8,如果您使用
path.get(“mazing.txt”)


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

Files.lines(Path.of("amazing.txt"))
    .filter(line -> line.matches(".*[,;]\\s*"))
    .forEach(text::add);
或者让流自己创建列表,那么您不必这样做:

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

请使用“试用资源”确保扫描仪始终处于关闭状态。现在,如果触发异常,
sf.close()
将不会执行。请使用“尝试使用资源”确保您的扫描仪始终处于关闭状态。现在,如果触发异常,
sf.close()
不会执行。谢谢,我现在更了解这一点。谢谢,我现在更了解这一点。