Contatore di sillabe in Java

Hiten Kanwar 12 ottobre 2023
  1. Utilizzare una funzione definita dall’utente per creare un contatore di sillabe in Java
  2. Usa le espressioni regolari per creare un contatore di sillabe in Java
Contatore di sillabe in Java

Una sillaba è un’unità fondamentale di pronuncia di qualsiasi parola che ha un suono vocale. La specifica per una sillaba in questo tutorial sarà che ogni vocale adiacente conta come una sillaba.

Ad esempio, nella parola real, ea contribuisce a una sillaba. Ma per la parola regal, ci sarebbero due sillabe: e e a. Tuttavia, una e alla fine della parola non sarà contata come una sillaba. Inoltre, ogni parola ha almeno una sillaba indipendentemente dalle regole precedentemente menzionate.

Questo tutorial discuterà come creare un contatore di sillabe con le specifiche sopra menzionate utilizzando Java.

Utilizzare una funzione definita dall’utente per creare un contatore di sillabe in Java

Possiamo creare il nostro metodo SyllableCount() che conta la sillaba in base alle specifiche fornite. Per prima cosa, usiamo la funzione toLowerCase() e convertiamo la stringa richiesta in minuscolo. Attraversiamo la stringa e controlliamo singolarmente ogni carattere, che sia una vocale o meno, e il carattere precedente.

Lo implementiamo nel codice seguente.

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

Produzione:

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

Nel metodo sopra, dividiamo il problema, leggiamo queste righe, le dividiamo in parole e poi contiamo le sillabe per ogni parola. Successivamente, contiamo per ogni riga.

Usa le espressioni regolari per creare un contatore di sillabe in Java

Possiamo anche usare espressioni regolari. Potremmo usare la funzione Matcher.find() per trovare le sillabe usando un modello per la stringa data.

Ricorda di importare il pacchetto java.util.regex per usare le espressioni regolari.

Vedi il codice qui sotto.

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

Produzione:

syllables for string Regal is 2

Articolo correlato - Java String