如何在字符串中搜索多个单词

时间:2015-04-26 15:17:53

标签: java string

我有一个像" UUDUUUUUUUUDU"我想找到该字符串中是否有多个UUDU。这是一个排列程序。我尝试使用匹配器,但匹配器通过单个UUDU和多个

做出反应
    Matcher matcher = Pattern.compile("UUDU|UUDU").matcher(uudu);
    if(matcher.find())
    {  

3 个答案:

答案 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;
}