Java의 음절 카운터

Hiten Kanwar 2023년10월12일
  1. 사용자 정의 함수를 사용하여 Java에서 음절 카운터 만들기
  2. 정규식을 사용하여 Java에서 음절 카운터 만들기
Java의 음절 카운터

음절은 모음 소리가있는 모든 단어의 발음의 기본 단위입니다. 이 자습서에서 음절에 대한 사양은 인접한 각 모음이 한 음절로 계산된다는 것입니다.

예를 들어,real이라는 단어에서ea는 한 음절에 기여합니다. 그러나regal이라는 단어에는ea의 두 음절이 있습니다. 그러나 단어 끝에있는e는 음절로 계산되지 않습니다. 또한 모든 단어에는 앞서 언급 한 규칙에 관계없이 최소한 한 음절이 있습니다.

이 튜토리얼에서는 Java를 사용하여 위에서 언급 한 사양으로 음절 카운터를 만드는 방법에 대해 설명합니다.

사용자 정의 함수를 사용하여 Java에서 음절 카운터 만들기

제공된 사양에 따라 음절을 계산하는 자체 메서드SyllableCount()를 만들 수 있습니다. 먼저toLowerCase()함수를 사용하고 필요한 문자열을 소문자로 변환합니다. 우리는 문자열을 순회하고 모음인지 아닌지, 이전 문자인지 여부에 관계없이 모든 문자를 개별적으로 확인합니다.

다음 코드에서이를 구현합니다.

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

출력:

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

위의 방법에서 우리는 문제를 나누고,이 줄을 읽고, 단어로 나누고, 각 단어의 음절을 센다. 그 후, 우리는 각 줄을 계산합니다.

정규식을 사용하여 Java에서 음절 카운터 만들기

정규식을 사용할 수도 있습니다. Matcher.find()함수를 사용하여 주어진 문자열에 대한 패턴을 사용하여 음절을 찾을 수 있습니다.

정규식을 사용하려면java.util.regex패키지를 가져와야합니다.

아래 코드를 참조하십시오.

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

출력:

syllables for string Regal is 2

관련 문장 - Java String