我已经在这里看到了这个问题的解决方案,但是这个人的代码与我的不同。我只想知道我做错了什么。我对编程非常陌生,非常想变得优秀。
问题:(字符串中指定字符的出现次数)使用以下 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/