Jegors Čemisovs
Jegors Čemisovs

Reputation: 740

How to count syllables in word using Java?

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:

  1. To count the number of syllables you should use letters a, e, i, o, u, y as vowels.

  2. Count the number of vowels in the word.

  3. Do not count double-vowels (for example, "rain" has 2 vowels but is only 1 syllable)

  4. If the last letter in the word is 'e' do not count it as a vowel (for example, "side" is 1 syllable) 

  5. 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

Answers (1)

Ose Daniel Okojie
Ose Daniel Okojie

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

Related Questions