有没有办法用java递归检查字符串是否至少包含一个大写字母?

有没有办法用java递归检查字符串是否至少包含一个大写字母?,java,string,recursion,boolean,Java,String,Recursion,Boolean,我得到IndexOutOfBoundsException异常可能是因为charAt方法,但我被卡住了。 我知道我必须使用大写,但我不确定具体在哪里 public static boolean hasCapitals(String s) { if(Character.isUpperCase(s.charAt(0))) { return true; } else { return hasCapitals(s.substring(1)); } }

我得到IndexOutOfBoundsException异常可能是因为charAt方法,但我被卡住了。 我知道我必须使用大写,但我不确定具体在哪里

public static boolean hasCapitals(String s) {
    if(Character.isUpperCase(s.charAt(0))) {
        return true;
    } else {
        return hasCapitals(s.substring(1));
    }
}

public static void main( String[] args ){
    System.out.println( hasCapitals( "New Hampshire" ) ); // returns true
    System.out.println( hasCapitals( "word" ) ); // returns false
    System.out.println( hasCapitals( "I" ) ); // returns true
    System.out.println( hasCapitals( "" ) ); // returns false
}

您必须在递归中有一个中断条件才能最终出来。代码中缺少该条件,当字符串的长度为1时,将出现异常

在调用isUpperCase之前,请尝试检查字符串的长度

public static boolean hasCapitals(String s) {
    if(s == null || s.length() == 0) {
        return false;
    }
    if(Character.isUpperCase(s.charAt(0))) {
        return true;
    } else if(s.length() > 1){
        return hasCapitals(s.substring(1));
    } else {
        return false;
    }
}

试着这样做,完全符合你的需要

公共静态无效字符串[]args{ System.out.println新罕布什尔州首府,0; System.out.println大写字母,0; System.out.println I,0; System.out.println大写字母,0; System.out.println汉普郡,0; } 私有静态布尔hascapitalString值,int索引{ ifvalue.isEmpty{ 返回false; } ifCharacter.isUpperCasevalue.charAtindex{ 返回true; }else ifvalue.length>索引+1{ 返回hascapitalValue,索引+1; } 返回false; }
您应该添加一个检查,如if s.isEmpty,return false。在找到任何大写字母之前到达字符串末尾时会发生什么情况?您需要处理这种情况您需要迭代字符串。首先将字符串转换为char arraychar[],并对其进行迭代并检查循环。当你进行循环迭代时,你可以将它重构为递归的。你有什么特别的理由要递归地进行它吗?如果不是,有一个非常简单的解决方案。如果string.EqualString.toLowerCase=true,则该字符串不包含大写字母。只需返回!s、 isEmpty&&Character.isUpperCases.charAt0 | | hascapitals.substring1;此处不需要if语句。不需要空检查。另一方面,当一个空字符串被传递给该代码时,该代码仍然会失败,并出现异常。将null更改为空字符串后,它就工作了!非常感谢你,你是对的。添加了空字符串的附加检查。您可以使用s.isEmpty而不是s.length==0…