23

文字列を連続した文字に分割するために機能する正規表現はありString.split()ますか?つまり、次の文字が前の文字と異なる場合に分割されますか?

テストケースは次のとおりです。

String regex = "your answer here";
String[] parts = "aaabbcddeee".split(regex);
System.out.println(Arrays.toString(parts));

期待される出力:

[aaa, bb, c, dd, eee]

テストケースには入力としてのみ文字が含まれていますが、これはわかりやすくするためのものです。入力文字は任意の文字にすることができます。


ループやその他の手法を含む「回避策」を提供しないでください。

問題は、上記のようにコードに適切な正規表現を見つけることです。つまり、他のメソッド呼び出しのみを使用split()し、他のメソッド呼び出しは使用しません。「仕事をする」コードを見つけることについての質問ではありません。

4

1 に答える 1

31

1つのステップで分割するための正規表現を作成することは完全に可能です。

"(?<=(.))(?!\\1)"

同じ文字のすべてのグループ間で分割したいので、2つのグループ間の境界を探す必要があります。これを実現するには、前の文字を取得するためだけにポジティブルックビハインドを使用し、ネガティブルックアヘッドとバックリファレンスを使用して次の文字が同じ文字ではないことを確認します。

ご覧のとおり、正規表現はゼロ幅です(2つのアサーションのみ)。正規表現によって文字が消費されることはありません。

于 2012-11-28T02:17:20.147 に答える