我试图创建一个递归方法来查找String中UpperCase字母的出现次数。我的代码如下:
public class findUppercase {
public static int searchUppercase(String s, int high) {
if (s.length() == 1) {
if (Character.isUpperCase(s.charAt(0)))
return 1;
else
return 0;
} else if (Character.isUpperCase(s.charAt(high - 1)) )
return 1 + searchUppercase(s, s.length() - 1);
else
return searchUppercase(s, s.length() - 1);
}
public static int searchUppercase(String s) {
return searchUppercase(s, s.length());
}
public static void main(String[] args) {
String a = "ABCmdsaA";
System.out.println(searchUppercase(a));
}
}
我收到错误:
Exception in thread "main" java.lang.StackOverflowError
at java.lang.Character.getType(Character.java:6924)
at java.lang.Character.isUpperCase(Character.java:5518)
at java.lang.Character.isUpperCase(Character.java:5488)
at findUppercase.searchUppercase(findUppercase.java:9)
答案 0 :(得分:3)
由于你的String永远不会改变,它的长度永远不会改变,所以
if (s.length() == 1) {
除非你最初传入一个char字符串,否则永远不会成立
更改字符串s
的值
虽然我个人只会使用for
循环而不是递归方法。
答案 1 :(得分:0)
根本不需要递归方法,也不需要for
循环。
只是做:
public static long searchUppercase(String s) {
return s.chars()
.filter(i -> Character.isUpperCase(i))
.count();
}
但是如果你坚持使用递归方法,你只需要一个大写检查和一个递归调用:
public static long searchUppercase(String s, long count) {
if (s.length() == 0) {
return count;
}
if (Character.isUpperCase(s.charAt(0))) ++count;
String tail = s.substring(1);
return searchUppercase(tail, count);
}
public static long searchUppercase(String s) {
return searchUppercase(s, 0);
}