Silbenzähler in Java

Hiten Kanwar 12 Oktober 2023
  1. Verwenden Sie eine benutzerdefinierte Funktion, um einen Silbenzähler in Java zu erstellen
  2. Verwenden Sie reguläre Ausdrücke, um einen Silbenzähler in Java zu erstellen
Silbenzähler in Java

Eine Silbe ist eine grundlegende Ausspracheeinheit jedes Wortes, das einen Vokalklang hat. Die Spezifikation für eine Silbe in diesem Tutorial ist, dass jeder benachbarte Vokal als eine Silbe zählt.

Im Wort real trägt zum Beispiel ea zu einer Silbe bei. Aber für das Wort regal gäbe es zwei Silben: e und a. Ein e am Ende des Wortes wird jedoch nicht als Silbe gezählt. Außerdem hat jedes Wort unabhängig von den zuvor genannten Regeln mindestens eine Silbe.

In diesem Tutorial wird erläutert, wie Sie mit Java einen Silbenzähler mit den oben genannten Spezifikationen erstellen.

Verwenden Sie eine benutzerdefinierte Funktion, um einen Silbenzähler in Java zu erstellen

Wir können unsere eigene Methode SyllableCount() erstellen, die die Silbe basierend auf den angegebenen Spezifikationen zählt. Zuerst verwenden wir die Funktion toLowerCase() und wandeln den benötigten String in Kleinbuchstaben um. Wir durchlaufen die Zeichenkette und prüfen jedes Zeichen einzeln, ob es ein Vokal ist oder nicht, und das vorherige Zeichen.

Dies implementieren wir im folgenden Code.

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

Ausgabe:

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

Bei der obigen Methode teilen wir das Problem auf, lesen diese Zeilen, teilen sie in Wörter auf und zählen dann die Silben für jedes Wort. Danach zählen wir für jede Zeile.

Verwenden Sie reguläre Ausdrücke, um einen Silbenzähler in Java zu erstellen

Wir können auch reguläre Ausdrücke verwenden. Wir könnten die Funktion Matcher.find() verwenden, um die Silben anhand eines Musters für die angegebene Zeichenkette zu finden.

Denken Sie daran, das Paket java.util.regex zu importieren, um reguläre Ausdrücke zu verwenden.

Siehe den Code unten.

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

Ausgabe:

syllables for string Regal is 2

Verwandter Artikel - Java String