java - 如何在 Pattern.compile ("\\R").splitAsStream(input) 中包含尾随空字符串?

标签 java regex newline

这不是 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/

相关文章:

regex - 如何优化 grep 正则表达式以匹配 URL

c - 为什么 getchar() 在 printf 语句后读取 '\n'?

创建 .gitattributes 文件后,Git 不会更改行结尾

java - Spring 创建新对象但不应该创建

java - 在Hadoop群集上执行字数统计

java - 当路径和文件名都包含通配符时列出与正则表达式匹配的文件路径

javascript - JQuery/Javascript : New RegExp() stops loop

java - 如何将 BufferedImage 转换为 AVI?

R - 将字母数字字符观察值与每个字母因子的列分开,每个观察值具有数字值

python - 删除从文件读取的列表中的换行符