递归计算字符串中的大写字符

时间:2013-07-22 17:24:47

标签: java string count char uppercase

我必须解决一个练习,计算一个字符串中的所有大写字符 - 递归 - 无论如何我以为我可能找到了解决方案 - 但它不起作用...... 你可能会帮助我吗?谢谢!

public static int CountCapitals(String s) {
    int counter = 0;
    // if (Character.isUpperCase(s.charAt(0)))counter+=1;
    if (s.length() == 0)
        return counter;
    if (s.length() == 1 && s.charAt(0) < 65 && s.charAt(0) > 90)
        return 0;
    if (s.charAt(0) < 'A' && s.charAt(0) > 'Z') {
        return CountCapitals(s.substring(1));
    } 
    if (s.charAt(0) >= 'A' && s.charAt(0) <= 'Z')
        counter++;
        return CountCapitals(s.substring(1));
}

5 个答案:

答案 0 :(得分:2)

您的代码的问题是使用counter:每个调用级别都有自己的counter,最初设置为零。底部的++运算符无效。

您需要根据上一次调用的结果计算此调用的结果。你的基本情况(即s.length() == 0)没问题;您的其余代码需要更改,以便在第一个字母为非资本时返回任何CountCapitals(s.substring(1));当第一个字母为大写时,您的函数应返回1 + CountCapitals(s.substring(1))

答案 1 :(得分:1)

当字符串的长度为1且唯一的字符为大写时,您需要考虑这种情况(在这种情况下,您应该返回1)。

此外,您需要将计数器作为参数传递,而不是期望它“转移”到其他函数调用中。

答案 2 :(得分:0)

这种递归应该符合你的要求:

public static int countCapitals(String s) {
    if (s.length() == 0) return 0;
    int cap = Character.isUpperCase(s.charAt(0)) ? 1 : 0;
    return countCapitals(s.substring(1)) + cap;
}

如果这不是家庭作业,你可以尝试一种快速约5-10倍的迭代方法:

public static int countCapitals(String s) {
    int count = 0;
    for (int idx = 0; idx < s.length(); idx++) {
        if (Character.isUpperCase(s.charAt(idx))) {
            count++;
        }
    }
    return count;
}

答案 3 :(得分:0)

您实际上不需要使用counter变量来跟踪大写字母的数量。相反,你可以只通过递归调用来跟踪总数:

public static int CountCapitals(String s) 
{
    if (s.length() == 1)
        return (Character.isUpperCase(s.charAt(0)) ? 1 : 0);
    else 
        return CountCapitals(s.substring(1)) + 
               (Character.isUpperCase(s.charAt(0)) ? 1 : 0);    
}

如果这是一个作业,你必须使用ASCII值,那么很好,但如果没有,你真的应该Character.isUpperCase(char c)。如果您不熟悉条件运算符,则定义如下:

if(someExpression == true)
{
  //output 1
}
else
{
  //output 0
}

简洁地表示为:

(someExpression == true) ? 1 : 0


NB:
在您的示例中,counter在每个方法调用开始时设置为0,这就是为什么它不起作用。如果确实想要使用counter,请将其作为参数传递给方法,并使用每个方法调用更新参数。当你到达String的末尾时,只需返回参数即可。

答案 4 :(得分:-1)

您尝试这个

公共类HelloWorld {

public static int isUpperCase(String str){

    if(str.length()==0) return 0;

    boolean check =Character.isUpperCase(str.charAt(0));

    if(check){

      return  isUpperCase(str.substring(1))+1;
    }

    return isUpperCase(str.substring(1));
         
 }



   public static void main(String []args){

    String n= "FSAsdsadASdcCa";
    System.out.println(isUpperCase("FSAsdsadASdcCa"));
  
 }

}