【问题标题】:How do you capitalize a char in a string using recursion?如何使用递归将字符串中的字符大写?
【发布时间】:2021-09-01 19:01:14
【问题描述】:

我目前是第一次学习 Java 递归,但遇到了一个问题。任务是接收字符串 s 和 char x,如果字符 x 出现在字符串中,则将其大写,并将所有非 x 字符变为小写。 (即,如果 x 为 'g',则 Digging 返回 diGGinG)。现在,我的代码返回“iggingggingGINGINGngg”

我知道代码可能有很大的缺陷,但是没有很多类似的递归问题可用,我不知道从哪里开始我的错误。任何指针表示赞赏。

public class Capitalize {
public static String capitalize(String s, char x) {
    if(s.length() == 0) {
        return s;
    }
    String ans = "";
    if(s.charAt(0) == x) {
        ans += s.substring(1).toUpperCase();
    }
    else {
        ans +=s.substring(1).toLowerCase();
    }
    return ans + capitalize(s.substring(1), x);
}

public static void main(String[]  args) {
    System.out.println(capitalize("Digging", 'g')); //return diGGinG
}

}

【问题讨论】:

  • 要解决递归问题,您需要先考虑基本情况。您的问题的基本情况是什么?
  • 你认为"Digging".substring(1) 的回报是什么?
  • 如果 char x 根本不在字符串中,基本情况会是这样吗? “Digging”.substring(1) 会返回“D”吗?
  • java中的字符串是不可变的,所以你也应该考虑一下这意味着什么。

标签: java string recursion uppercase


【解决方案1】:

对子串的使用有误会

System.out.println("Digging".substring(1)); // output : igging

要获得您应该使用的唯一第一个元素:

System.out.println("Digging".substring(0,1)); // output : D

试试这个:

public static void main(String []args){
    System.out.println(capitalize("Digging", 'g')); // output : diGGinG
    
 }
public static String capitalize(String s, char x) {
    if(s.length() == 0) {
        return s;
    }
    String ans = "";
    if(s.charAt(0) == x) {
        ans += s.substring(0,1).toUpperCase();
    }
    else {
        ans +=s.substring(0,1).toLowerCase();
    }
    return ans + capitalize(s.substring(1), x);
}

【讨论】:

    猜你喜欢
    • 2013-07-21
    • 2021-12-11
    • 2019-08-30
    • 2021-12-10
    • 1970-01-01
    • 2021-11-24
    • 2015-06-01
    • 2023-04-05
    • 2014-05-16
    相关资源
    最近更新 更多