Java将文本文件读入流并将其拆分
我想读取一个带有流的文本文件并将其保存到数组中 假设我的文本文件如下所示Java将文本文件读入流并将其拆分,java,file,split,java-8,java-stream,Java,File,Split,Java 8,Java Stream,我想读取一个带有流的文本文件并将其保存到数组中 假设我的文本文件如下所示 ;评释书 G40 K88 F32 H38 ; 诺赫·艾因·科门塔尔 B55 H33 K34 Bla77 现在我想要一个数组或数组列表,如下所示 G40 K88 F32 H38 B55 H33 K34 Bla77 所以我想删除以“;”开头的行,并在空格后拆分其他所有内容 我试着这样做: List<String> list = new ArrayList<>(); try (Stream&
;评释书
G40 K88 F32
H38
; 诺赫·艾因·科门塔尔
B55
H33 K34 Bla77
现在我想要一个数组或数组列表,如下所示
G40
K88
F32
H38
B55
H33
K34
Bla77
所以我想删除以“;”开头的行,并在空格后拆分其他所有内容
我试着这样做:
List<String> list = new ArrayList<>();
try (Stream<String> stream = Files.lines(Paths.get(path))) {
list = stream
.filter(line -> !line.startsWith(";"))
// .map(string -> list.split(" "))
.map(String::toUpperCase)
.collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
}
list.forEach(System.out::println);
使用函数.map(string->list.split(“”),我将得到此错误类型列表的方法split(string)未定义
我是Java新手,经过几个小时的搜索,我找不到答案。希望这里有人能给我一个提示。感谢拆分行并创建包含其元素的流
line -> Stream.of(line.split("\\s+"))
//OR
//line -> Arrays.stream(line.split("\\s+"))
这个lambda创建流
,但是如果我们将它与映射一起使用
like
map(line -> Stream.of(line.split("\\s+")))
我们将获得流
。这不是我们想要的,因为我们不想在流上“迭代”,而是在它的元素上。因此,我们想要“展平”这个结构,以获得流
这可以通过以下方式实现:
flatMap(line -> Stream.of(line.split("\\s+")))
这个怎么样
list = stream
.filter(line -> !line.startsWith(";")) // filters out comments
.map(String::toUpperCase) // uppercase
.flatMap(string -> Stream.of(string.split(" "))) // flattens the split array to the
// Stream elements and adds to the
// current Stream
.collect(Collectors.toList()); // as List
返回一个流,该流由将提供的映射函数应用于每个元素(来自文档)而生成的映射流的内容替换该流的每个元素的结果组成
非常好的例子在上。对于一行式解决方案,请尝试:
Files.lines(Paths.get("your/file/path"))
.filter(l -> !l.startsWith(";"))
.flatMap(l -> Arrays.stream(l.split("\n")))
.forEach(System.out::println);
Files.lines(Paths.get("your/file/path"))
.filter(l -> !l.startsWith(";"))
.flatMap(l -> Arrays.stream(l.split("\n")))
.forEach(System.out::println);