我正在尝试用Java创建一个ubbi dubbi检测器。我目前正在尝试计算字符串中有多少个ub,并将它们加到计数器中,然后如果我输入的int下有某个数字,则它不是ubbi dubbi,但等于或大于ubbi那就是ubbi dubbi。不允许使用正则表达式,字符串生成器或数组。

这是我目前所拥有的:

public static boolean detect(String phrase) {
    boolean isUbbi = false;
    int count = 0;
    CharSequence ub = "ub";

    if (phrase.contains(ub)) {
        count++;
    }
    if (count >= 2) {
        isUbbi = true;
    } else {
        isUbbi = false;
    }
    return isUbbi;
}

最佳答案

在您的情况下,成为true的条件永远不会满足。

因为

if (phrase.contains(ub)) {
        count++;
    }


条件是

 if (count >= 2) {  // never met. Always false.


那将检查一次事件然后完成。需要更多的实现来检查没有涉及loopsub-string等的事件。

如果您可以自由使用Apache commons library

采用

int count = StringUtils.countMatches(phrase, "ub");


如果没有图书馆,

        String mainString = "ububsdfub";
        Pattern pat = Pattern.compile("ub");
        Matcher matcher = pat.matcher(mainString);
        int count = 0;
        while (matcher.find()) {
            count += 1;
        }
        System.out.println(count);  // prints 3 since 3 ub's are there.


使用基本操作拆分(内部使用正则表达式)

        String mainString = "ububsdfUb";
        String occurance = "ub";
        System.out.println(mainString.split(occurance, -1).length-1);


甚至不允许拆分

        String mainString = "ububsdfub";
        String occurance = "ub";
        int index=0;
        int count=0;
        while ((index = mainString.indexOf(occurance, index)) != -1) {
            count++;
            index += occurance.length() - 1;
        }
        System.out.println(count);

10-05 23:52