Java заменить символ в строке - PullRequest
3 голосов
/ 04 апреля 2020

Я пишу метод для замены всех гласных в строке заданным символом, но он не работает для строк с более чем одним гласным. Это работает для "пятки", но не для "привет". Пожалуйста помоги. Мой код ниже:

public Boolean isVowel(char ch){

        char ch2 = Character.toLowerCase(ch); 
        char[] vowels = {'a', 'e', 'i', 'o', 'u'};

        for(int i = 0; i < vowels.length; i++){
            if (ch2 == vowels[i]) {
                return true;
            }
        }
            return false;
    }

    public String replaceVowels(String phrase, char ch){
        String newP = "";
        for(int i = 0; i < phrase.length(); i++){  
            char c = phrase.charAt(i);
            Boolean vowel = isVowel(c);

            if(vowel){ 
               newP = phrase.replace(c, ch);
            }
        }

        return newP;
    }

Ответы [ 3 ]

6 голосов
/ 04 апреля 2020
public String replaceVowels(final String phrase,final String ch) {
    return phrase.replaceAll("[aeiou]", ch);
}
2 голосов
/ 04 апреля 2020

Вот один из способов заменить все гласные в строке символом java. (? Я), чтобы сделать его без учета регистра. "" + Ch получает строку из символа.

String str = "hEllo";
char ch = 'X';
str = str.replaceAll( "(?i)[aeiou]", "" +ch );

Может также быть более явным с регистром, например:

String str = "hEllo";
char ch = 'X';
str = str.replaceAll( "[aeiouAEIOU]", "" +ch );
2 голосов
/ 04 апреля 2020

Ваша проблема newP = phrase.replace(c, ch); Вы присваиваете последнее значение.

String newP = phrase;
        for(int i = 0; i < phrase.length(); i++){
            char c = phrase.charAt(i);
            Boolean vowel = isVowel(c);

            if(vowel){
                newP = newP.replace(c, ch);
            }
        }

Лучшее решение, как ответил Алекс, просто добавьте строку,

phrase.replaceAll("[aeiou]", ""+ch);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...