したがって、問題は、文字列内のすべての文字が特定の正規表現の一致に含まれるかどうかを判断することです。または、別の言い方をすると、特定の正規表現の一致に含まれる可能性のあるすべての文字位置のセットに、文字列内のすべての文字位置が含まれる場合です。
私の考えは、次のようなことをすることです:
boolean matchesAll(String myString, Matcher myMatcher){
boolean matched[] = new boolean[myString.size()];
for(myMatcher.reset(myString); myMatcher.find();)
for(int idx = myMatcher.start(); idx < myMatcher.end(); idx++)
matched[idx] = true;
boolean allMatched = true;
for(boolean charMatched : matched)
allMatched &= charMatched;
return allMatched
}
しかし、これを行うためのより良い方法はありますか?
また、これを書いているときに、次のような場合、それは私が望むことをしないことに気づきました。
matchesAll("abcabcabc", Pattern.compile("(abc){2}").matcher()); //returns false
Matcher
最後の一致の最後から開始してのみ一致を試みるためです。3 番目の位置でマッチャーを開始するabc
と、一致に 3 番目が含まれる可能性があるため、true を返す必要があります。
boolean matchesAll(String myString, Matcher myMatcher){
boolean matched[] = new boolean[myString.size()];
boolean allMatched = true;
for(int idx = 0; idx < myString.size() && myMatcher.find(idx);
idx = myMatcher.start() + 1) {
for(int idx2 = myMatcher.start(); idx2 < myMatcher.end(); idx2++)
matched[idx2] = true;
}
boolean allMatched = true;
for(boolean charMatched : matched)
allMatched &= charMatched;
return allMatched;
}
このコードをより良く、より速く、より読みやすくする方法はありますか?