Contador de sílabas em Java

Hiten Kanwar 12 outubro 2023
  1. Use uma função definida pelo usuário para criar um contador de sílabas em Java
  2. Use expressões regulares para criar um contador de sílabas em Java
Contador de sílabas em Java

Uma sílaba é uma unidade fundamental de pronúncia de qualquer palavra que tenha som de vogal. A especificação de uma sílaba neste tutorial será que cada vogal adjacente conte como uma sílaba.

Por exemplo, na palavra real, ea contribui para uma sílaba. Mas para a palavra regal, haveria duas sílabas: e e a. No entanto, um e no final da palavra não será contado como uma sílaba. Além disso, cada palavra tem pelo menos uma sílaba, independentemente das regras mencionadas anteriormente.

Este tutorial irá discutir como criar um contador de sílaba com as especificações mencionadas acima usando Java.

Use uma função definida pelo usuário para criar um contador de sílabas em Java

Podemos criar nosso próprio método SyllableCount() que conta a sílaba com base nas especificações fornecidas. Primeiro, usamos a função toLowerCase() e convertemos a string necessária para minúsculas. Percorremos a string e verificamos cada caractere individualmente, seja uma vogal ou não, e o caractere anterior.

Implementamos isso no código a seguir.

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));
  }
}

Resultado:

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

No método acima, dividimos o problema, lemos essas linhas, dividimos em palavras e, em seguida, contamos as sílabas de cada palavra. Depois, contamos para cada linha.

Use expressões regulares para criar um contador de sílabas em Java

Também podemos usar expressões regulares. Poderíamos usar a função Matcher.find() para encontrar as sílabas usando um padrão para a string dada.

Lembre-se de importar o pacote java.util.regex para usar expressões regulares.

Veja o código abaixo.

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));
  }
}

Resultado:

syllables for string Regal is 2

Artigo relacionado - Java String