Поиск гласных с помощью регулярных выражений на 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
→ Ссылка