Compteur de syllabes en Java

Hiten Kanwar 12 octobre 2023
  1. Utiliser une fonction définie par l’utilisateur pour créer un compteur de syllabes en Java
  2. Utiliser des expressions régulières pour créer un compteur de syllabes en Java
Compteur de syllabes en Java

Une syllabe est une unité fondamentale de prononciation de tout mot qui a un son de voyelle. La spécification d’une syllabe dans ce didacticiel sera que chaque voyelle adjacente compte pour une syllabe.

Par exemple, dans le mot real, ea contribue à une syllabe. Sans le mot regal, il y aurait deux syllabes : e et a. Cependant, un e à la fin du mot ne sera pas compté comme une syllabe. De plus, chaque mot a au moins une syllabe, quelles que soient les règles mentionnées précédemment.

Ce didacticiel expliquera comment créer un compteur de syllabes avec les spécifications mentionnées ci-dessus à l’aide de Java.

Utiliser une fonction définie par l’utilisateur pour créer un compteur de syllabes en Java

Nous pouvons créer notre propre méthode SyllableCount() qui compte la syllabe en fonction des spécifications fournies. Tout d’abord, nous utilisons la fonction toLowerCase() et convertissons la chaîne requise en minuscules. Nous parcourons la chaîne et vérifions chaque caractère individuellement, qu’il s’agisse ou non d’une voyelle, et le caractère précédent.

Nous l’implémentons dans le code suivant.

import java.util.*;
public class Main {
  static public int SyllableCount(String s) {
    int count = 0;
    s = s.toLowerCase();

    for (int i = 0; i < s.length(); i++) { // traversing till length of string
      if (s.charAt(i) == '\"' || s.charAt(i) == '\'' || s.charAt(i) == '-' || s.charAt(i) == ','
          || s.charAt(i) == ')' || s.charAt(i) == '(') {
        // if at any point, we encounter any such expression, we substring the string from start
        // till that point and further.
        s = s.substring(0, i) + s.substring(i + 1, s.length());
      }
    }

    boolean isPrevVowel = false;

    for (int j = 0; j < s.length(); j++) {
      if (s.contains("a") || s.contains("e") || s.contains("i") || s.contains("o")
          || s.contains("u")) {
        // checking if character is a vowel and if the last letter of the word is 'e' or not
        if (isVowel(s.charAt(j)) && !((s.charAt(j) == 'e') && (j == s.length() - 1))) {
          if (isPrevVowel == false) {
            count++;
            isPrevVowel = true;
          }
        } else {
          isPrevVowel = false;
        }
      } else {
        count++;
        break;
      }
    }
    return count;
  }

  static public boolean isVowel(char c) {
    if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
      return true;
    } else {
      return false;
    }
  }
  public static void main(String[] args) {
    String ans = "Regal";
    String ans1 = "Real";
    System.out.println("syllables for string " + ans + " is " + SyllableCount(ans));
    System.out.println("syllables for string " + ans1 + " is " + SyllableCount(ans1));
  }
}

Production:

syllables for string Regal is 2
syllables for string Real is 1

Dans la méthode ci-dessus, nous divisons le problème, lisons ces lignes, les divisons en mots, puis comptons les syllabes pour chaque mot. Ensuite, nous comptons pour chaque ligne.

Utiliser des expressions régulières pour créer un compteur de syllabes en Java

On peut aussi utiliser des expressions régulières. Nous pourrions utiliser la fonction Matcher.find() pour trouver les syllabes en utilisant un motif pour la chaîne donnée.

N’oubliez pas d’importer le package java.util.regex pour utiliser des expressions régulières.

Voir le code ci-dessous.

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
  static public int countSyllables(String s) {
    int counter = 0;
    s = s.toLowerCase(); // converting all string to lowercase
    if (s.contains("the ")) {
      counter++;
    }
    String[] split = s.split("e!$|e[?]$|e,|e |e[),]|e$");

    ArrayList<String> al = new ArrayList<String>();
    Pattern tokSplitter = Pattern.compile("[aeiouy]+");

    for (int i = 0; i < split.length; i++) {
      String s1 = split[i];
      Matcher m = tokSplitter.matcher(s1);

      while (m.find()) {
        al.add(m.group());
      }
    }

    counter += al.size();
    return counter;
  }

  public static void main(String[] args) {
    String ans = "Regal";
    System.out.println("syllables for string " + ans + " is " + countSyllables(ans));
  }
}

Production:

syllables for string Regal is 2

Article connexe - Java String