Contador de sílabas en Java
- Utilice una función definida por el usuario para crear un contador de sílabas en Java
- Utilice expresiones regulares para crear un contador de sílabas en Java
Una sílaba es una unidad fundamental de pronunciación de cualquier palabra que tenga un sonido vocal. La especificación de una sílaba en este tutorial será que cada vocal adyacente cuenta como una sílaba.
Por ejemplo, en la palabra real
, ea
contribuye a una sílaba. Pero para la palabra regal
, habría dos sílabas: e
y a
. Sin embargo, una e
al final de la palabra no se contará como una sílaba. Además, cada palabra tiene al menos una sílaba independientemente de las reglas mencionadas anteriormente.
Este tutorial discutirá cómo crear un contador de sílabas con las especificaciones mencionadas anteriormente usando Java.
Utilice una función definida por el usuario para crear un contador de sílabas en Java
Podemos crear nuestro propio método SyllableCount()
que cuenta la sílaba en función de las especificaciones proporcionadas. Primero, usamos la función toLowerCase()
y convertimos la cadena requerida a minúsculas. Atravesamos la cadena y verificamos cada carácter individualmente, ya sea una vocal o no, y el carácter anterior.
Implementamos esto en el siguiente código.
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));
}
}
Producción :
syllables for string Regal is 2
syllables for string Real is 1
En el método anterior, dividimos el problema, leemos estas líneas, las dividimos en palabras y luego contamos las sílabas de cada palabra. Luego, contamos para cada línea.
Utilice expresiones regulares para crear un contador de sílabas en Java
También podemos usar expresiones regulares. Podríamos usar la función Matcher.find()
para encontrar las sílabas usando un patrón para la cadena dada.
Recuerde importar el paquete java.util.regex
para usar expresiones regulares.
Vea el código a continuación.
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));
}
}
Producción :
syllables for string Regal is 2