特定の文字列を取得し、繰り返し文字に基づいて分割したいと考えています。
例として、 string を入力すると、次の文字列abcaaabbc
の配列を出力したいと思うでしょう[abca, a, ab, bc]
。文字が繰り返されるたびに、新しい文字列を開始したいと考えています。
String.split()
もちろん、ループでこれを行うことは可能ですが、メソッドを使用してそれを達成できるかどうか疑問に思っています。もしそうなら - それは何でしょうRegEx
か?
前の文字 (look-behind (?<=(.))
) が次の文字 (look-ahead (?=\\1)
) と同じである入力文字列をトークン化し、\1
キャプチャし(.)
ます。
String str = "abcbabaaabbc";
String regex = "(?<=(.))(?=\\1)";
System.out.println(Arrays.toString(str.split(regex)));
パフォーマンスの観点からは、ループに固執します。O(n) 時間で実行されます。string.split(regex) は遅いことが知られています。最近、ループの代わりに使用したところ、O(n) ループと比較して O(n^2) であることがわかりました。
KISSの主な仕事はここにあります