Java - 使用IndexOf计算字符串中的字母出现次数

时间:2016-08-10 10:21:19

标签: java

public static void countLetters (String s, char x){
    int length = s.length();
    int count  = 0;
    int index = 0;
    int z = 0;
    while (index < length) {
        int y = s.indexOf(x, z);
        z = z+1;

        if(s.charAt(y)==x){
            count = count + 1;
        }
        index = index + 1;
}
    System.out.println(count);

大家好,我是java的新手,所以任何小指导都会非常感激。 我正在尝试编写一个方法来计算给定字符串和char中的字母出现次数。

目前的方法确实很重要,但并不完全相同。我被要求使用indexOf方法来解决这个问题。我遇到的问题是,如果我把文字“惊人”并且要求查找字符'a'它首先通过'a'并计算更新但是当涉及到char'm'时再次计算我不想要的更新它。

我正在使用Allen Downey的一本名为think java的书 - 练习8.3。 它不是任何作业:)。

3 个答案:

答案 0 :(得分:0)

这样

public static void countLetters(String string, char character) {
        int count = 0;
        int index = 0;
        while(true) {
            index = string.indexOf(character, index) + 1; // +1 is to continue search 
            if (index == 0)                               //from next character after match
                break;
            count++;
        }
        System.out.println(count);
    }

使用countLetters("amazingaa", 'a');调用4

答案 1 :(得分:0)

您一次在字符串上迭代一个字符<img src="$baseURL/$imageName"/> ,但是当您调用#set($url = "$baseURL/$imageName") 时,会返回第一次出现的z = z+1(大于s.indexOf(x, z)) 。所以迭代将如下所示:

  1. z = 0,y = 0(第一个a的索引&#34; a mazing&#34;)
  2. z = 1,y = 2(第二个a指数&#34; am a zing&#34;)
  3. z = 2,y = 2(第二个a指数&#34; am a zing&#34;再次)
  4. 所以代替x,你应该做z,并在z = z+1返回-1后停止迭代。

答案 2 :(得分:0)

你应该用这个:

    int length = s.length();
    int count  = 0;
    int z = 0;
    while (z < length) {
        int y = s.indexOf(x, z);
        if(y == -1){
            break;
        }
        z = (y == z) ? z + 1 : y + 1;

        if (s.charAt(y) == x) {
            count = count + 1;
        }
    }
    System.out.print(count);

基本上当你使用s.indexOf(chr, fromIndex)时,它检查来自指定索引的char,直到它找到它为止,这就是为什么当它在m时它仍然检查直到它找到a串。此外,如果找不到字符串,您应该检查-1并且因为从索引到字符串末尾找不到字符串,所以会因为搜索结束而中断。这样可以在执行检查if(s.charAt(y) == x)

时防止indexOfBoundsException

表达式z = (y == z) ? z + 1 : y + 1;更像是if else语句。 ?是三元运算符,是一种简短形式:

if(y == z){
   z = z + 1;
}else{
  z = y + 1;
}

因为如果使用表达式设置变量值的else语句是简单的,则可以使用三元运算符来保存代码行。