一个音节的规范:
每组相邻元音(a、e、i、o、u、y)算作一个音节(例如,“real”中的“ea”贡献一个音节,但“e...a”在“regal”中算作两个音节)。但是,单词末尾的“e”不算作音节。此外,每个单词至少有一个音节,即使之前的规则给出的计数为零。
我的 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;
}
}
根据一位同事的说法,这在 this text 上使用时应产生 528 个音节,但我似乎可以得到它等于,我不知道我们谁是正确的。请帮助我将我的方法开发成正确的算法或帮助证明这是正确的。谢谢。
最佳答案
其中一个问题可能是您在输入上调用了 lover case 方法,但没有分配它。
所以如果你改变
word.toLowerCase();
到
word = word.toLowerCase();
肯定会有帮助。
关于Java - 编写一个基于规范的音节计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9154027/