如何通过读取文件获得空间分隔的字符串流?



我正试图读取文本文件并获得其中的单词流。这里的单词是指用空格分隔的字符串。我知道Java有Files.lines()方法,它给出了一个Stream<String>,但这是一个行流。我希望通过用空格分隔每行来对该流进行后处理。但是下面的代码:

return Files.lines(Path.of(filename)).map((line)-> line.split(" "));

给我一个编译错误:

Type mismatch: cannot convert from Stream<Object> to Stream<String>Java(16777235)

是否有一些铸造,我需要在这里做Stream<String>或有一个更好的方法来获得一个词流?

String.split返回一个数组。您可以使用flatMap将数组包装成流并连接它们:

Stream<String> words = Files.lines(Path.of(filename))
.map(line -> line.split(" "))
.flatMap(Arrays::stream);

为其他两个答案添加更多选择

Stream<String> stream = Arrays.stream(Files.readString(Paths.get(filename)).split(" "));

是另一种方式,但本质上与其他方式是一样的。

List List = new ArrayList<>();

try{
Scanner s = new Scanner(new File(filename));
while(s.hasNext()){
String string = s.next();
list.add(string);
}
}catch(Exception e){
}

这是一种更有效的方法,因为扫描器会自然地读取,直到遇到空格。

最新更新