规范音节:爪哇 - 写基于规范的音节计数器
每组相邻元音(A,E,I,O,U,Y)计为一个音节(例如,所述在“真实”中的“ea”贡献了一个音节,但“regal”中的“e ... a”被视为两个音节)。然而,一个单词末尾的“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;
}
}
根据给同事,这将导致在528个音节时在this text上使用,但我似乎可以得到它,我不知道我们哪一个是正确的。请帮助我将我的方法发展为正确的算法或帮助证明这是正确的。谢谢。
一个问题是,字符串是不可变的。尝试改变word.toLowerCase(); to word = word.toLowerCase(); ,看看是否改变任何东西。 – 2012-02-05 23:31:21
你似乎也在做很多确定字数限制的工作。在这里查看String的split()方法:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split%28java.lang.String%29并且可能会简化给你的东西。 – 2012-02-05 23:34:56
这确实给了我508个音节的不同结果(也许更加正确!)。仍然不是528虽然我的解决方案现在正确或是我的同事的528结果是正确的,我的代码中仍然存在错误? – mino 2012-02-05 23:35:49