【问题标题】:Check how many times a character occurs consecutively in a String检查一个字符在字符串中连续出现的次数
【发布时间】:2013-12-02 19:03:41
【问题描述】:

我试图计算一个字符在字符串中连续出现的次数。这个似乎无处可去:\ 如果你能帮助我,我将不胜感激。

提前致谢:)

        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++;

        }

【问题讨论】:

  • 改用正则表达式?
  • 你的标题是occurs consecutively,但你的描述只是occurred。是哪一个?
  • @CMate 不允许使用正则表达式 :(
  • @peeskillet 对不起,是的,我也应该连续提到

标签: java string loops


【解决方案1】:

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

我将 for 循环移到 do while 中,以便您对每个字符执行此操作。我还将 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!='!');

【讨论】:

  • 健全人!!对我来说太棒了:)再开心不过了:)
  • 很高兴我能帮上忙。注意它现在的写法,它可能需要像“AAA”这样的东西,并算作连续 6 个(AAA 加 AA 加 A)。我省略了连续重置,以便您可以根据需要进行调整。
  • 是的,我也刚刚意识到这一点。我将如何重置它?
  • index++ 也应该在 for 循环之上 :)
  • 我将 index++ 放在循环下方,以便当前字符被计为连续字符(应该如此)。您是否试图找到任何字符的最高连续计数?您要连续查找(详细)什么。 “连续字符”可以通过多种方式计算。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    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++

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多