在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));