所以问题是确定字符串中的每个字符是否都包含在特定正则表达式的匹配中。或者,换一种说法,如果可以包含在特定正则表达式的某些匹配中的所有字符位置的集合包括字符串中的所有字符位置。
我的想法是做这样的事情:
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
只尝试在最后一场比赛结束时开始匹配。我希望它返回 true,因为如果您在位置 3 开始匹配器,它可能会abc
在匹配中包含第三个。
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;
}
有什么方法可以让这段代码更好、更快或更易读吗?