В вашем коде проблема находится во вложенном цикле for.Я говорю это в кавычках, потому что на самом деле это никогда не зацикливается.Первая итерация j=0
немедленно прерывает цикл, поскольку либо ваше письмо равно a
с (letter == vowels[0])
, либо нет.В любом случае вы делаете break;
и добавляете символ.Это означает, что ваш цикл может быть уменьшен до простого if-else
, который проверяет, является ли буква a
, и заменяет ее на _
или сохраняет ее.
Чтобы решить эту проблему, вам нужно использовать другойподход.Вы можете создать строку гласных, например «aeiouAEIOU», и использовать indexOf , чтобы проверить, является ли выбранный символ гласным.
public static String omitVowels(String input) {
StringBuilder out = new StringBuilder(input.length());
String vowels = "aeiouAEIOU";
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (vowels.indexOf(c) >= 0) // is vowel if index not negative
out.append('_');
else
out.append(c);
}
return out.toString();
}
indexOf(char)
вернет -1
, еслипредоставленный символ не является частью строки, иначе он вернет определенный индекс.Мы можем использовать это свойство, чтобы проверить, является ли символ гласным или нет.
Примеры
omitVowels("hello world")
-> "h_ll_ w_rld"
omitVowels("aeiou")
-> "_____"
omitVowels("TESTing")
-> "T_ST_ng"