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

时间:2018-04-22 16:02:52

标签: lambda java-8 stream java-stream

我有一个包含2行的csv文件。我用了

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

读取文件中的行,但看起来它也读取第3行为,,,,,, 第3行是空白的。有没有办法擦除空行?

3 个答案:

答案 0 :(得分:1)

以下内容将忽略所有空行:

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());

答案 1 :(得分:0)

由于您感兴趣的CSV文件中只有2行,并且您不希望包含第3行,因此您可以使用{{1}将行截断为2操作。

limit

<强>更新

您似乎不知道要预先检索的行数,因此无法使用上述解决方案,在这种情况下,如果您说&#34;空白&#34;你的意思是&#34; ,,,,,,&#34;然后从Java-9开始,您可以使用Stream<String> stream = Files.lines(Paths.get(file1)).limit(2)

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(","))

但是,如果您因任何原因无法使用JDK-9,那么一旦找到空白行就无法停止,相反,您需要Stream<String> stream = Files.lines(Paths.get(file1)) .takeWhile(s -> !s.trim().isEmpty()) 这样做:

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(",,,,,,"))

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

答案 2 :(得分:0)

Files.lines(Paths.get(path))//Stream<String>
                .map(Optional::ofNullable) //Stream<Optional<String>>
                .flatMap(Optional::stream) //Stream<String>
                .forEach(System.out::println);