を使用して入力から重複する一致を抽出するにはどうすればよいString.split()
ですか?
たとえば、次のように一致するものを見つけようとする場合"aba"
:
String input = "abababa";
String[] parts = input.split(???);
期待される出力:
[aba, aba, aba]
String#split
重複する一致は得られません。文字列の特定の部分は、取得された配列の一意のインデックスにのみ含まれ、2 つのインデックスには含まれないためです。
Pattern
ここでandMatcher
クラスを使用する必要があります。この正規表現を使用できます: -
Pattern pattern = Pattern.compile("(?=(aba))");
メソッドを使用Matcher#find
して重複するすべての一致を取得し、それを出力group(1)
します。
上記の正規表現は、すべての空の文字列に一致しaba
、その後に が続き、最初にキャプチャされたグループを出力します。これ以降look-ahead
はゼロ幅アサーションであるため、一致する文字列は消費されません。したがって、重複するすべての一致を取得します。
String input = "abababa";
String patternToFind = "aba";
Pattern pattern = Pattern.compile("(?=" + patternToFind + ")");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(patternToFind + " found at index: " + matcher.start());
}
出力: -
aba found at index: 0
aba found at index: 2
aba found at index: 4
私はindexOfを使用します。
for(int i = text.indexOf(find); i >= 0; i = text.indexOf(find, i + 1))
System.out.println(find + " found at " + i);