我有一个包含2行的csv文件。我用了
String file1 ="C:\\sample.csv";
Stream<String> lines = Files.lines(Paths.get(file1)) {
读取文件中的行,但看起来它也读取第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);