这是一件非常微不足道的事情:替换一行
- 可能包含尾随空格
- 以 '\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");
恐怕,这不是很快,但可以接受。