Поиск гласных с помощью регулярных выражений на Java
Пытаюсь написать выражение чтобы в слове считалось кол-во гласных букв,но если буква е стоит в конце или 2 гласные буквы идут подряд-такие не считать.Пока пытаюсь сделать первое условие,но не понимаю почему выражение вида
String regex="([(aioeuy)&&[^e]$])";
не работает.Ищу вот так:
String str="capaciotyye";
Matcher r = Pattern.compile(regex).matcher(str);
while(r.find()) {count++;}
System.out.println(count);
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Можно разделить код на две части:
- Фильтр слов по условию
- Подсчет букв
Пример:
for (String word : Arrays.asList("are", "one", "round", "hello", "world")) {
// Ищем слова с двумя буквами подряд или те, что оканчиваются на e
Matcher match = Pattern.compile("[aioeuy]{2}|e$").matcher(word);
if (match.find()) {
continue;
}
// Подсчет количества букв
match = Pattern.compile("[aioeuy]").matcher(word);
int count = 0;
while(match.find()) {count++;}
System.out.println(word + " -> " + count);
}
Результат:
hello -> 2
world -> 1
UPD. После уточнения вопроса:
for (String word : Arrays.asList("are", "one", "round", "hello", "world", "heelloe")) {
String origWord = word;
// Ищем слова с двумя буквами подряд или те, что оканчиваются на e
Matcher match = Pattern.compile("([aioeuy])\\1|e$").matcher(word);
if (match.find()) {
word = match.replaceAll("");
}
// Подсчет количества букв
match = Pattern.compile("[aioeuy]").matcher(word);
int count = 0;
while(match.find()) {count++;}
System.out.println(origWord + " -> " + count);
}
Результат:
are -> 1
one -> 1
round -> 2
hello -> 2
world -> 1
heelloe -> 1