Я полагаю, ответ Даффимо уже решает проблему использования вашего метода, поэтому я просто упомяну проблему использования replace
, например s = s.replace('a', 'e');
String.replace
заменит каждый случайтак что вы можете просто вызвать его 5 раз подряд:
s = s.replace( 'a', 'e' );
s = s.replace( 'e', 'i' );
s = s.replace( 'i', 'o' );
s = s.replace( 'o', 'u' );
s = s.replace( 'u', 'a' );
Но в итоге вы получите только «a», поскольку каждый «a» станет «e», затем каждый «e» iи так по одному, пока каждое «у» не станет «а».Хорошо, мы могли бы изменить порядок, чтобы искать гласные после того, как там изменилось:
s = s.replace( 'u', 'a' );
s = s.replace( 'o', 'u' );
s = s.replace( 'i', 'o' );
s = s.replace( 'e', 'i' );
s = s.replace( 'a', 'e' );
Но у нас все еще есть проблема с 'u', которая заканчивается на 'e' (временно 'a').Поэтому обходной путь может заключаться в использовании временного символа, но как убедиться, что он еще не используется в вашем тексте:
s = s.replace( 'u', '*' ); //don't set it to 'a' directly
s = s.replace( 'o', 'u' );
s = s.replace( 'i', 'o' );
s = s.replace( 'e', 'i' );
s = s.replace( 'a', 'e' );
s = s.replace( '*', 'a' ); //then replace the temp character by 'a'
Лучшим решением будет обработка текста, по одному символу за раз.Если вы найдете гласную, вы измените ее.
Мое решение будет использовать массив, чтобы уменьшить многословие и позволить индексу дать вам следующие гласные.(используя % array.length
, чтобы вернуться в начало, если вы находитесь после последнего гласного)
static char [] vowels ={'a', 'e' ,'i', 'o','u'};
public static String changeV(String s){
char[] chars = s.toCharArray(); //transform a String in an array of character
for ( int i = 0; i < chars.length; ++i ) { //iterate the array
int index = Arrays.binarySearch( vowels, chars[i] ); //look for the current character in the vowels array and get his index
if ( index > -1 ) // is it a vowels
chars[i] = vowels[( index + 1 ) % vowels.length]; // change with the next vowels
}
return new String(chars); //create a nez String with the result
}
Это даст вам:
changeV( "aeiou" ); //eioua
changeV( "This is a test" ); //Thos os e tist
changeV( "Hello world" ); //Hillu wurld