Java 从文本文件打印单词
我现在有一个程序,它运行一个txt文件并打印文件中以a或T开头的行。现在我正在制作它,以便它只打印以a或结尾的单词;有人认为他们能帮我吗 这是我的程序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.
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()
不会执行。谢谢,我现在更了解这一点。谢谢,我现在更了解这一点。