检查字符在字符串中连续出现的次数

时间:2013-12-02 19:03:42

标签: java string loops

我正在尝试计算字符串中连续出现字符的次数。用这个似乎无处可去: 如果你能帮助我,我将非常感激。

提前致谢:)

        int totCharacters=0, vowels=0, digits=0, odds=0, consecutive=0, index=0;
        String text;
        char ch;

        Scanner input = new Scanner(System.in);
        System.out.print("Please enter a sentence terminated with a full stop or exclamation mark: ");
        text = input.nextLine();

        do {
            ch = text.charAt(index);

            if(ch=='.' && ch=='!')
                break;

            if(index<text.length()-1)
                totCharacters++;
            if(ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u')
                vowels++;
            if(ch>='0' && ch<='9')
                digits++;
            if(ch=='1' || ch=='3' || ch=='5' || ch=='7' || ch=='9')
                odds++;

            index++;

        }while(ch!= '.' && ch!='!');

        for(int i=0; i<text.length(); i++)
        {

            if(ch==text.charAt(i))
                consecutive++;

        }

3 个答案:

答案 0 :(得分:0)

我认为问题在于它没有按照你期望的方式计算consecutive。问题是在您浏览完所有字符后for循环正在运行。由于ch设置为'。'的最后一次。要么 '!'遇到了,for循环只计算所有'。'要么 '!'字符。而不只是连续的。

答案 1 :(得分:0)

我会做这样的事情。有两根弦,一根拿着所有辅音,另一根拿着所有的元音。检查其中一个字符串是否包含该字符。如果没有,那么它是标点符号或空格。代码过滤掉了空间。

String consString = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";
String vowelString = "aeiouAEIOU";

for (int i = 0; i < s.length(); i++){
    if (consString.contains(s.charAt(i)){
        consCount++;
    }
    else if (vowelString.contains(s.charAt(i)){
        vowelCount++;
    } 
    else if (!Character.isWhiteSpace(s.charAt(i))
        punctCount++;
    }
}

您可以为任何所需的字符集执行此操作。此外,如果要计算连续数,可以保留currentChar变量并检查下一个变量是否等于它。如果是,consecutives++

答案 2 :(得分:0)

这会计算所有连续的字符(我相信,无法编译atm)。这可能不是你想要的。我可以根据连续字符的含义进行修改。连续都?最高连续?

我在do中移动了for循环,以便你对每个char进行操作。我还将int i变量基于索引,这样你就不会在你正在检查的当前字符之前查看字符。同时将索引的递增移动到for循环之后,以便将其自身计为连续一次,因此“AA”将连续2次。

我需要你定义什么连续应该等于使这个正确计算。现在它将查看每个角色,并为每个匹配的角色(包括其自身)后连续添加1。

    int totCharacters=0, vowels=0, digits=0, odds=0, consecutive=0, index=0;
    String text;
    char ch;

    Scanner input = new Scanner(System.in);
    System.out.print("Please enter a sentence terminated with a full stop or exclamation mark: ");
    text = input.nextLine();

    do {
        ch = text.charAt(index);

        if(ch=='.' && ch=='!')
            break;

        if(index<text.length()-1)
            totCharacters++;
        if(ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u')
            vowels++;
        if(ch>='0' && ch<='9')
            digits++;
        if(ch=='1' || ch=='3' || ch=='5' || ch=='7' || ch=='9')
            odds++;


    for(int i=index; i<text.length(); i++)
        {

             if(ch==text.charAt(i))
             {
                consecutive++;
             }
             else 
             {
                 break;
             }

        }
        index++;
        }while(ch!= '.' && ch!='!');