Método recursivo para capitalizar todos los caracteres y agregar un espacio entre cada uno en Java

Estoy practicando métodos recursivos, y uno de los tres en los que estoy trabajando intenta capitalizar una cadena completa y agregar un espacio entre cada carácter. Abajo está mi código:

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("", " ");

}

Sin embargo, se está reemplazando con algo más que un solo espacio, excepto entre los dos primeros caracteres, y no puedo entender por qué de por vida. He probado este uso de replace en otro método no recursivo, y funciona tal como lo esperaba. Si me pueden ayudar a entender esto, sería muy apreciado.

Mi salida se ve así:

 H I       T   H   E   R   E       !       

Y quiero esto:

H I   T H E R E !
Respuesta 1

¿Hay alguna biblioteca que convierta archivos XSLX a CSV? Archivo XSLX generado usando apache poi Si no, ¿alguien desarrolló un método útil para esto? Gracias

Necesito copiar a menudo las últimas filas de una sola tabla en MSSQL a la tabla MySQL. He creado un script java y todo funciona, pero creo que es posible mejorar el rendimiento. He replicado la mesa ...

Necesito invertir solo letras en Cadena y mantener símbolos y números en el mismo lugar usando Character.isLetter y también necesito mantener el mismo orden de las palabras invertidas. Mi código invierte una cadena ...

La clase abstracta significa que tiene métodos abstractos y métodos concretos, pero incluso si solo tiene métodos concretos, se ve como un método normal solo correcto. Y por qué estamos declarando la clase ...