我有一个 CSV 文件,其中有 2 行。我用过
String file1 ="C:\\sample.csv";
Stream<String> lines = Files.lines(Paths.get(file1)) {
读取文件中的行,但看起来它也将第三行读取为
,,,,,,
第三行是空白。有没有办法删除空白行?
以下将忽略所有空行:
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());
由于您感兴趣的 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(","))
取决于空白行对您意味着什么。
Files.lines(Paths.get(path))//Stream<String>
.map(Optional::ofNullable) //Stream<Optional<String>>
.flatMap(Optional::stream) //Stream<String>
.forEach(System.out::println);