Java - Написание счетчика слогов на основе спецификаций
Спецификация для слога:
Каждая группа смежных гласных (a, e, i, o, u, y) считается одним слогом (например, «ea» в «real» добавляет один слог, но «e ... a» in »regal) "считается как два слога). Однако «е» в конце слова не считается слогом. Также каждое слово имеет хотя бы один слог, даже если в предыдущих правилах счетчик равен нулю.
Мой метод countSyllables:
public int countSyllables(String word) {
int count = 0;
word = word.toLowerCase();
for (int i = 0; i < word.length(); i++) {
if (word.charAt(i) == '\"' || word.charAt(i) == '\'' || word.charAt(i) == '-' || word.charAt(i) == ',' || word.charAt(i) == ')' || word.charAt(i) == '(') {
word = word.substring(0,i)+word.substring(i+1, word.length());
}
}
boolean isPrevVowel = false;
for (int j = 0; j < word.length(); j++) {
if (word.contains("a") || word.contains("e") || word.contains("i") || word.contains("o") || word.contains("u")) {
if (isVowel(word.charAt(j)) && !((word.charAt(j) == 'e') && (j == word.length()-1))) {
if (isPrevVowel == false) {
count++;
isPrevVowel = true;
}
} else {
isPrevVowel = false;
}
} else {
count++;
break;
}
}
return count;
}
Метод isVowel, который определяет, является ли буква гласной:
public boolean isVowel(char c) {
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
return true;
} else {
return false;
}
}
По словам коллеги, это должно привести к 528 слогам при использовании наэтот текст, но я, кажется, могу сделать это равным этому, и я не знаю, кто из нас прав. Пожалуйста, помогите мне развить мой метод в правильный алгоритм или помогите показать, что это правильно. Спасибо.