这不是 Java String split removed empty values 的重复项,它处理返回新数组的 split()
方法。在这种情况下,我想避免数组。
我通过解决方法解决了这个问题,我将其发布在下面作为我的问题的可能解决方案。
我的目标是处理包括空字符串的所有行,如下例所示:
String input = "foo\nbar\n\n\nzul\n\n\n";
Pattern NEWLINE = Pattern.compile("\\R");
int [] count = {1};
NEWLINE
.splitAsStream(input)
.forEach(line -> System.out.println(count[0]++ + ": " + line));
产生:
1: foo
2: baz
3:
4:
5: zul
但是,它丢失了:
6:
7:
如何包含最后一个空行?
最佳答案
您可以使用a lookahead (?=(\\R))
确保\\R
分隔符不会被消耗,然后用 String.trim()
自行删除它.
String input = "foo\nbar\n\n\nzul\n\n\n";
Pattern NEWLINE = Pattern.compile("(?=(\\R))");
int[] count = {1};
NEWLINE.splitAsStream(input)
.map(String::trim)
.forEach(line -> System.out.println(count[0]++ + ": " + line));
但是,这会导致 ""
的零长度匹配最后\n
之后.
1: foo
2: bar
3:
4:
5: zul
6:
7:
8:
关于java - 如何在 Pattern.compile ("\\R").splitAsStream(input) 中包含尾随空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54198026/