これはかなり些細なことです: 行を置き換えます
- 末尾の空白を含む可能性がある
- '\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");
残念ながら、それほど速くはありませんが、許容範囲です。