使用 Files.lines(Paths.get(file1)) 读取文件也会读取空白行。如何删除空白行?

问题描述 投票:0回答:3

我有一个 CSV 文件,其中有 2 行。我用过

String file1  ="C:\\sample.csv";
Stream<String> lines = Files.lines(Paths.get(file1)) { 

读取文件中的行,但看起来它也将第三行读取为

,,,,,,

第三行是空白。有没有办法删除空白行?

java lambda java-8 stream java-stream
3个回答
2
投票

以下将忽略所有空行:

Stream<String> lines = Files.lines(Paths.get(file1)).filter(s -> !s.isEmpty());

在您的情况下,如果您想忽略所有包含“,,,,,,”的行,您可以执行以下操作:

Stream<String> lines = Files.lines(Paths.get(file1)).filter(s -> !s.equals(",,,,,,"));

或者,您可以忽略两者:

Stream<String> lines = Files.lines(Paths.get(file1)).filter(s -> !s.equals(",,,,,,") && !s.isEmpty());

0
投票

由于您感兴趣的 CSV 文件中只有 2 行,并且您不希望包含第 3 行,因此您可以使用

2
操作将这些行截断为
limit

Stream<String> stream = Files.lines(Paths.get(file1)).limit(2)

更新:

您似乎不知道要预先检索的行数,因此无法使用上述解决方案,在这种情况下,如果您说“空白”时,您的意思是具有“,,,,,,”的行,那么截至Java-9,你可以使用

takeWhile
:

Stream<String> stream = Files.lines(Paths.get(file1))
                             .takeWhile(s -> !s.equals(",,,,,,"))

或者如果逗号的数量可能不同,那么你可以这样做:

Stream<String> stream = Files.lines(Paths.get(file1))
                             .takeWhile(s -> !s.startsWith(","))

否则,如果你说空白时你的意思是,那么你可以这样做:

Stream<String> stream = Files.lines(Paths.get(file1))
                             .takeWhile(s -> !s.trim().isEmpty())

但是,如果您因任何原因无法使用 JDK-9,那么您不能在发现空行时立即停止,相反,您需要像这样

filter
将它们删除:

Stream<String> stream = Files.lines(Paths.get(file1))
                             .filer(s -> !s.trim().isEmpty())

或:

Stream<String> stream = Files.lines(Paths.get(file1))
                             .filter(s -> !s.equals(",,,,,,"))

或:

Stream<String> stream = Files.lines(Paths.get(file1))
                             .filter(s -> !s.startsWith(","))

取决于空白行对您意味着什么。


0
投票
Files.lines(Paths.get(path))//Stream<String>
                .map(Optional::ofNullable) //Stream<Optional<String>>
                .flatMap(Optional::stream) //Stream<String>
                .forEach(System.out::println);
© www.soinside.com 2019 - 2024. All rights reserved.