这是一件非常微不足道的事情:替换一行
- 可能包含尾随空格
- 以 '\n', '\r', '\r\n' 结尾或什么都没有
由不包含尾随空格并以“\n”结尾的行。
我想我可以通过一个简单的正则表达式来做到这一点。在这里,"\\s+$"
不能作为$
决赛之前的比赛\n
。这就是为什么有\\z
. 至少我是这么认为的。但
"\n".replaceAll("\\s*\\z", "\n").length()
返回 2。实际上,$
、\\z
和\\Z
在这里做完全相同的事情。我很困惑...
Alan Moore 的解释是有帮助的,但就在我刚刚想到在 EOF 替换任意最终空白垃圾时,我可以做到
replaceFirst("\\s*\\z"", "\n");
而不是replaceAll
. 做上述所有事情的一个简单解决方案是
replaceAll("(?<!\\s)\\s*\\z|[ \t]*(\r?\n|\r)", "\n");
恐怕,这不是很快,但可以接受。