Reputation: 229
I am writing a method to replace all vowels in a string with a given character, but it does not work for strings with more than one vowel. It works for "heel" but not for "hello". Please help. My code below:
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;
}
Upvotes: 3
Views: 145
Reputation: 4339
public String replaceVowels(final String phrase,final String ch) {
return phrase.replaceAll("[aeiou]", ch);
}
Upvotes: 6
Reputation: 94
Here is one way to replace all vowels in a string with an java char. The (?i) is to make it case insensitive. The "" +ch gets a string from the char.
String str = "hEllo";
char ch = 'X';
str = str.replaceAll( "(?i)[aeiou]", "" +ch );
Could also be more explicit with case like:
String str = "hEllo";
char ch = 'X';
str = str.replaceAll( "[aeiouAEIOU]", "" +ch );
Upvotes: 2
Reputation: 7195
Your problem is newP = phrase.replace(c, ch);
You are assigning a last value.
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);
}
}
Better solution as answered by Alex just add String,
phrase.replaceAll("[aeiou]", ""+ch);
Upvotes: 1