Рекурсивный метод для заглавных букв всех символов и добавления пробела между каждым в Java - PullRequest
1 голос
/ 01 февраля 2020

Я практикую рекурсивные методы, и один из трех, над которыми я работаю, пытается использовать заглавную строку целиком и добавлять пробел между каждым символом. Ниже мой код:

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

}

Тем не менее, он заменяет больше, чем просто один пробел, за исключением между двумя первыми символами, и я не могу понять, почему для меня жизни. Я проверил это использование замены в другом нерекурсивном методе, и он работает так, как я ожидаю. Если вы поможете мне понять это, я буду очень признателен.

Мой вывод выглядит так:

 H I       T   H   E   R   E       !       

И я хочу это:

H I   T H E R E !

1 Ответ

2 голосов
/ 01 февраля 2020

Вы не должны заменять символы, вместо этого сначала проверьте, что у вас есть хотя бы один символ (иначе верните пустую строку); если у вас есть хотя бы один символ, используйте первый символ с заглавными буквами, а затем объедините его с результатом рекурсивного вызова вашего метода. Например,

public static String toUpper(String str) {
    if (str.length() < 1) {
        return "";
    }
    return Character.toUpperCase(str.charAt(0)) + toUpper(str.substring(1));
}

, чтобы добавить пробел между каждым символом

return Character.toUpperCase(str.charAt(0)) 
        + " " + toUpper(str.substring(1));
...