【发布时间】: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