递归方法,在从大写或小写更改所有其他字母后返回一个字符串

recursion method that returns a string after changing every other letter from uppercase or lowercase

提问人:Branto 提问时间:3/5/2023 最后编辑:ThiyaguBranto 更新时间:3/5/2023 访问量:110

问:

使用递归将字符串字符从所有其他字母从大写更改为小写,然后返回该字符串。我试图扩展我对递归的知识,我知道我可以在没有它的情况下做到这一点,但我想知道你是如何做到这一点的,这就是我到目前为止所拥有的

public static String camelCaseRecursive(String w){
     if(w.length()==0) {
      return "";
        }
        
    char sec = 0;
       String returned_str = "";
    char ch = w.charAt(0);
       if (w.length() > 1) {
           sec = w.charAt(1);
       }
       
       ;
    String remaining_str = w.substring(1);
    returned_str = camelCaseRecursive(remaining_str);
        
    if(ch >= 'A' && ch <='Z' && sec >= 'a' && sec <='z'  ) {
           ch = Character.toLowerCase(w.charAt(0));
            
    returned_str = ch+returned_str;
        }
        else if((ch >= 'A' && ch <='Z') && (sec >= 'A' && sec <='Z')  ){
           ch = Character.toLowerCase(w.charAt(0));
           returned_str = ch+returned_str;
        }
        else if((ch >= 'a' && ch <='z')  && returned_str.length() %2 !=0){
          ch = Character.toUpperCase(w.charAt(0));
          returned_str = ch+returned_str;
        }
        else{
           
          returned_str = ch+returned_str;

        }
        
    return returned_str;
}

我的期望是

input:(Hello World) output:(hElLo wOrLd)
input:(Even) output:(eVeN)

我得到的是

input:(Hello World) output:(hElLo wOrLd)
input:(Even) output:(evEn)

我知道我得到我得到的原因是因为 returned_str.length() %2 !=0 给出奇数,如果使用 ==,它会为偶数字符串执行此操作。有没有办法同时做到这两点,或者知道何时在第一次调用时使用适当的一个?问题是我不知道如何在没有某种计数器来跟踪的情况下在递归中在大写和小写之间交替。是否可以设置一个可以在大写和小写之间交替的方法,或者设置一个条件,知道何时使用字符串的长度这样做,或者像下标或比较或其他东西一样读取它?

Java 字符串 递归 方法 返回

评论

0赞 Branto 3/5/2023
@Thiyagu我不会创建任何添加方法,但我不介意是否需要完全更改该方法以创建不同的方法或有效的方法。
0赞 Calvin P. 3/5/2023
在这个例子中,它计算出“wOrLd”无论如何都会以小写字母开头,但你想将每个单词都驼峰大写还是将其视为一个连续的字符串?

答:

2赞 Thiyagu 3/5/2023 #1

一种方法是使用传递其他参数的私有帮助程序方法。

我们将字符串的索引传递给处理,为了避免字符串串联,我们使用 .StringBuilder

public static String camelCaseRecursive(String s) {
    return camelCaseRecursiveHelper(s, 0, new StringBuilder());
}

private static String camelCaseRecursiveHelper(String s, int i,
                                               StringBuilder stringBuilder) {
    if (i == s.length()) {
        return stringBuilder.toString();
    } else {
        Character curr = s.charAt(i);
        if (Character.isLetter(curr)) {
            curr = i % 2 == 0
                    ? Character.toLowerCase(curr)
                    : Character.toUpperCase(curr);
        }
        stringBuilder.append(curr);
        return camelCaseRecursiveHelper(s, i + 1, stringBuilder);
    }
}

我们检查当前指数是偶数还是奇数,并在此基础上进行大小写转换。