java - 递归查找字符串中指定字符出现的次数

标签 java recursion

我已经在这里看到了这个问题的解决方案,但是这个人的代码与我的不同。我只想知道我做错了什么。我对编程非常陌生,非常想变得优秀。

问题:(字符串中指定字符的出现次数)使用以下 header 编写一个递归方法,查找字符串中指定字符的出现次数:

public static int count(String str, char a)

例如:count("Welcome", 'e') 返回 2。编写一个测试程序,提示用户输入一个字符串,后跟一个字符,并显示该字符在字符串中出现的次数。

我的代码有问题:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1

我的代码:

import java.util.Scanner;
public class Exercise18_10{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("Please enter a string");   
        String str = input.next();
        System.out.println("Please enter a character");   
        char car = input.next().charAt(0);
        int x = count ("welcome", 'e');
        System.out.println("The number of character " +car + " in string " +str + "     = "+ x);
    }//main

    public static int count(String str, char a){
        int ct = 0;    
        if(str.length()>0)
            if(str.charAt(0) == a)
                ct ++;
        count(str.substring(1),a);
        return ct;
    }
}

请帮忙,我做错了什么?

最佳答案

其他答案都是正确的;您需要在调用str.substring(1)之前检查字符串的长度。但是,您不需要其他方法来维护 ct 变量。这是 Java 101 的适当答案:

import java.util.Scanner;

public class Exercise18_10 {

  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Please enter a word: ");
    String word = input.next();
    System.out.print("Please enter a character: ");
    char c = input.next().charAt(0);
    int count = count(word, c);
    System.out.println(String.format("%d occurrences of %c in '%s'", count, c, word));
  }

  public static int count(String str, char a) {
    if (str.length() == 0) {
      return 0;
    }
    int count = 0;
    if (str.charAt(0) == a) {
      count++;
    }
    return count + count(str.substring(1), a);
  }


}

关于java - 递归查找字符串中指定字符出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40066281/

相关文章:

algorithm - 找到除以haskell的阶乘的数字的最大幂

java - 使用递归java的二进制搜索

javascript - 递归映射函数

java - 通过java从Mercury Quality center 9读取测试数据

java - 使用 REST 发送文件?

java - 存储在数组中的 HashMap 中所有元素的迭代器

java - 为什么 travis 没有设置正确的 JDK?

javascript - 如何创建嵌套的 li-ul-li 元素

algorithm - 关于T(n)的上下界

Java:关于调用 Runtime.freeMemory()、Runtime.totalMemory() 和 Runtime.maxMemory() 的成本