在Java中,将所有字符大写并在每个字符之间添加空格的递归方法
我正在练习递归方法,我正在研究的三种方法之一就是尝试将整个字符串大写,并在每个字符之间添加空格。下面是我的代码:在Java中,将所有字符大写并在每个字符之间添加空格的递归方法,java,string,recursion,replace,character,Java,String,Recursion,Replace,Character,我正在练习递归方法,我正在研究的三种方法之一就是尝试将整个字符串大写,并在每个字符之间添加空格。下面是我的代码: public static String toUpper(String str) { char ch; if(str.length() == 0) { return ""; } ch = str.charAt(0); if(Character.isLowerCase(ch)){ return Chara
public static String toUpper(String str) {
char ch;
if(str.length() == 0) {
return "";
}
ch = str.charAt(0);
if(Character.isLowerCase(ch)){
return Character.toUpperCase(ch) + toUpper(str.substring(1));
}
String newString = ch + toUpper(str.substring(1));
/*
* This is where my issue is.
* I assumed using the replace method would work just as it does on any other string;
* however I am getting incorrect output every time.
*/
return newString.replace("", " ");
}
然而,除了前两个字符之间的空格外,它正在被一个以上的空格所取代,而我也不知道为什么。我已经在另一个非递归方法中测试了replace的这种用法,它的工作原理与我预期的一样。如果你能帮我理解这一点,我将不胜感激
我的输出如下所示:
H I T H E R E !
我想要这个:
H I T H E R E !
您不应该替换字符,而是首先测试您是否至少有一个字符(否则返回空字符串);如果至少有一个字符,请将第一个字符大写,然后将其与递归调用方法的结果连接起来。像
public static String toUpper(String str) {
if (str.length() < 1) {
return "";
}
return Character.toUpperCase(str.charAt(0)) + toUpper(str.substring(1));
}
这是我想做的事情的简单解决方案。不知道我为什么不考虑在两者之间连接一个空格。我仍然不明白为什么对replace的调用不起作用,因为它实际上可以完美地为一个非递归方法添加我想要的空间,该方法与这个递归方法做的事情完全相同。不过,非常感谢!你不会相信我花了多少时间试图弄明白这一点。在递归的每个步骤中,你都会在字符之间添加一个空格,包括你在上一个递归步骤中添加的空格。
return Character.toUpperCase(str.charAt(0))
+ " " + toUpper(str.substring(1));