規範音節:爪哇 - 寫基於規範的音節計數器
每組相鄰元音(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