Reputation: 740
I am developing a student project and need to write a function to count syllables in word. The function is like long countSyllables(String word).
How to count syllables in word using Java? Any suggestions?
The provided rules are:
To count the number of syllables you should use letters a, e, i, o, u, y as vowels.
Count the number of vowels in the word.
Do not count double-vowels (for example, "rain" has 2 vowels but is only 1 syllable)
If the last letter in the word is 'e' do not count it as a vowel (for example, "side" is 1 syllable)
If at the end it turns out that the word contains 0 vowels, then consider this word as 1-syllable.
I had already write the function but I think it is not optimal. So I just would like to see other possible solutions. If any.
Full description for the task: https://hyperskill.org/projects/39/stages/208/implement
Current implementation:
public static int countSyllables(final String word) {
return max(1, word.toLowerCase()
.replaceAll("e$", "")
.replaceAll("[aeiouy]{2}", "a")
.replaceAll("[^aeiouy]", "")
.length());
}
Upvotes: 1
Views: 464
Reputation: 126
public static int countSyllables(final String word) {
return max(1, word.toLowerCase()
//in words that end with "e" replace
//"e" with ""
.replaceAll("e$", "") //e.g base=bas
//when two vowels appear together,
//replace them with "a"
.replaceAll("[aeiouy]{2}", "a") //e.g you == au,
//beautiful==bautiful
//again, when two vowels appear together,
//replace them with "a"
.replaceAll("[aeiouy]{2}", "a") //e.g au == a,
//bautiful==batiful
//replace any character that isn't aeiouy with ""
.replaceAll("[^aeiouy]", "") //e.g, batiful==aiu,
//a == a
.length() //aiu == 3 syllables, a == 1 syllable
);
}
Upvotes: 1