1 package org.apache.mina.example.haiku; 2 3 7 public class PhraseUtilities { 8 static int countSyllablesInPhrase(String phrase) { 9 int syllables = 0; 10 11 for (String word : phrase.split("[^\\w-]+")) { 12 if (word.length() > 0) { 13 syllables += countSyllablesInWord(word.toLowerCase()); 14 } 15 } 16 17 return syllables; 18 } 19 20 static int countSyllablesInWord(String word) { 21 char[] chars = word.toCharArray(); 22 int syllables = 0; 23 boolean lastWasVowel = false; 24 25 for (int i = 0; i < chars.length; i++) { 26 char c = chars[i]; 27 if (isVowel(c)) { 28 if (!lastWasVowel 29 || (i > 0 && isE(chars, i - 1) && isO(chars, i))) { 30 ++syllables; 31 lastWasVowel = true; 32 } 33 } else { 34 lastWasVowel = false; 35 } 36 } 37 38 if (word.endsWith("oned") || word.endsWith("ne") 39 || word.endsWith("ide") || word.endsWith("ve") 40 || word.endsWith("fe") || word.endsWith("nes") 41 || word.endsWith("mes")) { 42 --syllables; 43 } 44 45 return syllables; 46 } 47 48 static boolean isE(char[] chars, int position) { 49 return isCharacter(chars, position, 'e'); 50 } 51 52 static boolean isCharacter(char[] chars, int position, char c) { 53 return chars[position] == c; 54 } 55 56 static boolean isO(char[] chars, int position) { 57 return isCharacter(chars, position, 'o'); 58 } 59 60 static boolean isVowel(char c) { 61 return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' 62 || c == 'y'; 63 } 64 } 65 | Popular Tags |