递归方法查找字符串中UpperCase字母的出现次数 - 使用辅助方法

时间:2016-04-26 00:04:45

标签: java recursion counter uppercase helpermethods

我试图创建一个递归方法来查找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)

2 个答案:

答案 0 :(得分:3)

由于你的String永远不会改变,它的长度永远不会改变,所以

if (s.length() == 1) {
除非你最初传入一个char字符串

,否则

永远不会成立

使用String.substring

更改字符串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);
}