我有一个像" UUDUUUUUUUUDU"我想找到该字符串中是否有多个UUDU。这是一个排列程序。我尝试使用匹配器,但匹配器通过单个UUDU和多个
做出反应 Matcher matcher = Pattern.compile("UUDU|UUDU").matcher(uudu);
if(matcher.find())
{
答案 0 :(得分:2)
如果您不介意使用外部库,Apache Commons StringUtils类提供的方法CountMatches
可以完全满足您的需求。
答案 1 :(得分:2)
您可以使用群组匹配,注意 - if
应替换为while
:
String uudu = "UUDUUUUUUUUDU";
Matcher matcher = Pattern.compile("(UUDU)").matcher(uudu);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
<强>输出强>
UUDU
UUDU
为了计算 重叠的子字符串 ,我们可以这样做:
public static int countOverlappingSubstr(String subStr, String str, int i, int count){
int subLen = subStr.length();
if (i >= str.length() - subLen + 1)
return count;
if (str.substring(i, i + subLen).equals(subStr))
count++;
return countOverlappingSubstr(subStr, str, i+1, count);
}
public static void main(String[] args){
System.out.println(countOverlappingSubstr("UUDU", "UUDUUDU", 0, 0));
}
答案 2 :(得分:1)
如果您需要考虑重叠匹配,这是一个解决方案。否则,使用alfasin解决方案,这更简单。
private static int countOverlappingMatches(String str, String pattern) {
int count = 0;
int offset = 0;
while (str.length() > 0) {
int i = str.indexOf(pattern,offset);
if (i == -1) break;
count++;
offset = i + 1;
}
return count;
}