[英]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.