首页 > 解决方案 > 对字符串中的字符进行计数的函数

问题描述

对于我的家庭作业,我需要计算String. 如果彼此后面有超过三个相同的字符,则方法应该返回trueif not false

现在开发一个方法noMultiples (),它检查字符串中是否有三个(或更多)相等的字符noMultiples ()现在泛化,要重复的字符数是参数化的。

我已经尝试将输入溢出String到子字符串但收到String index out of Bounds错误。我也尝试使用该charAt()方法,但我现在有点卡住了。有没有办法解决这个问题?提前致谢

 public static boolean noMultiples(int n, String s) {
    for(int i=0;i<s.length();i++){
        if(s.charAt(i)==s.charAt(i+1)&&s.charAt(i+1)==s.charAt(i+2)){
            return true;
        }
    }
    return false;
}

这应该是预期的输出:

public static void main(String[] args) {
    boolean result = noMultiples("Hello World");
    System.out.println(result); // => true
    System.out.println(noMultiples("faaantastic")); // => false
    System.out.println(noMultiples(2, "Hello World")); // => false
}

标签: java

解决方案


您可以在方法中使用一些字段来存储字符重复的数量。

此外,重载 noMultiples以仅接受字符串。

注意:由于如果找到多个连续字符则noMultiples返回,因此最好命名此方法。这样做以后会更直观,以后可以修改或使用。truecontainsMultiples

public class test
{
    public static void main(String[] args)
    {
        System.out.println(containsMultiples("Hello World"));
        System.out.println(containsMultiples("faaaantastic"));
        System.out.println(containsMultiples(2, "Hello World"));
    }

    public static boolean containsMultiples(int n, String s) {
        int len = s.length();
        if(len == 0) return false;
        char lastChar = s.charAt(0);
        int multipliesFound = 1;

        for(int i = 1; i < len; i++) {
            if(s.charAt(i) == lastChar) {
                multipliesFound++;
            }
            else {
                multipliesFound = 1;
            }
            if(multipliesFound == n) {
                return true;
            }
            lastChar = s.charAt(i);
        }
        return false;
    }

    public static boolean containsMultiples(String s) {
        return containsMultiples(3, s);
    }
}

返回:

false
true
true

根据您的Hello World字符串示例,我假设您正在寻找一种仅查找连续等号字符的方法。


推荐阅读