我需要从行中扫描单词,这些行直接从文本文件中读取。我目前正在使用BufferedReader,FileReader和Scanner。 事情如下:
while((thisLine = reader.readLine()) != null){
Scanner scan = new Scanner(thisLine);
while(scan.hasNext()){
thisLine = scan.next();
System.out.println(thisLine);
}
}
它工作正常,但我想知道是否有一种更有效的方法可以这样做,而无需在读取的每一行中实例化Scanner类。
编辑:我实际上相信我需要使用Scanner类,因为如果它遇到某种模式,我必须再次“扫描”一行。我正在使用SIC机器的汇编程序,因此我必须找出我正在阅读的内容是注释,指令,操作数等。
答案 0 :(得分:1)
如果你正在使用Java 8,你可能想用这种简单的方式来阅读文件。
try(Stream<String> s = Files.lines(Paths.get("myFileName.txt"))) {
s.flatMap(x -> Arrays.stream(x.split(" ")))
.forEach(System.out::println);
}
答案 1 :(得分:0)
根本不需要Scanner
。删除整个while循环,只打印thisLine
while((thisLine = reader.readLine()) != null){
System.out.println(thisLine);
}
答案 2 :(得分:0)
假设您希望每个单词都在新行上,您可以消除 Scanner
并使用String.split("\\s+")
通过空格将每行标记为单词。然后,假设您使用的是Java 8+,您应该能够使用lambda来迭代令牌。像
while ((thisLine = reader.readLine()) != null) {
Stream.of(thisLine.split("\\s+")).forEach(System.out::println);
}