在 Java 中,**“空行”**通常有两种含义,需要区分清楚:
即行中一个字符都没有(不包括换行符本身)。
^$
String text = "abc\n\n123\n";
Pattern p = Pattern.compile("^$", Pattern.MULTILINE);
Matcher m = p.matcher(text);
while (m.find()) {
System.out.println("空行位置: " + m.start());
}
✅ Pattern.MULTILINE 很关键,它让 ^ 和 $ 匹配每一行的开始和结束。
实际文本中很多“空行”其实含有空格或 \t。
^\s*$
Pattern p = Pattern.compile("^\\s*$", Pattern.MULTILINE);
text = text.replaceAll("(?m)^\\s*$\\n", "");
或:
text = text.replaceAll("(?m)^\\s*\\n", "");
✅ (?m) 是内联的 MULTILINE 模式。
MULTILINE,^$ 只匹配整个字符串首尾\r\n,有时需要:^\s*\r?\n
| 需求 | 正则 |
|---|---|
| 完全空行 | ^$ |
| 空白空行 | ^\s*$ |
| 多行模式 | Pattern.MULTILINE 或 (?m) |
如果你是用于日志解析 / 文件读取 / 文本清洗,可以告诉我场景,我帮你写更精准的正则。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。