En este tutorial aprenderá a usar expresiones regulares en Java de manera práctica para contar elementos de una cadena, en particular:
- letras
- vocales
- consonantes
- espacios
Para los datos vamos a implementar un método para cada propiedad deseada y para ir más lejos vamos a crear una vista HTML para mostrar los resultados con la ayuda de Dukescript en menos de 30 minutos.
Longitud de cadena
Podemos obtener la longitud de un texto con una llamada al método String.length como sigue:
int letras (String miTexto) {
return miTexto.length();
}
Cuenta los espacios de una cadena
Para contar los espacios de una cadena usaremos una expresión Regular básica para identificar el carácter espacio en blanco. El carácter de espacio en blanco se puede representar como [ ] (observe el espacio entre los paréntesis).
int espacios (String miTexto) {
return miTexto.length()-miTexto.replaceAll("[ ]","").length();
}
Contar las vocales de una cadena
Para contar las vocales estamos usando una RegEx con cada una de las vocales.
int vocales (String miTexto) {
return miTexto.length()-miTexto.replaceAll("[aeiouAEIOU]","").length();
}
Contar las consonantes de una cadena
Para contar las consonantes seleccionamos todas las letras que no están presentes en la regex de vocales.
int consonantes (String miTexto) {
return miTexto.length()-miTexto.replaceAll("[b-df-hj-np-tv-zB-DF-HJ-NP-TV-Z]","").length();
}
Diseño del modelo de datos
Como podemos detectar que necesitamos para el modelo de datos una variable de tipo cadena llamada miTexto, para mantener el texto a analizar.
class StringStatistics {
String miTexto;
public StringStatistics(miTexto) {
this.miTexto=miTexto;
}
}
Convirtiéndo este código a la manera de generarlo de dukescript obtendremos
@Model (className = "StringStatistics", properties = {
@Property (name= "miTexto", type=String.class)
})
Diseño de la vista
A continuación vamos a crear un HTML para la vista como este:
<textarea placeholder="Escriba un texto para analizarlo..."></textarea>
<p>
La cadena <pre></pre> tiene
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
A continuación vamos a añadir los enlaces de golpe de gracia y nuestro código HTML final se convierte como siguiente
<textarea
data-bind="value: miTexto, valueUpdate: 'afterkeydown'"
placeholder="Escriba un texto para analizar...">
</textarea>
<p>
La cadena <pre data-bind="text: miTexto"></pre> tiene
<ul>
<li data-bind="text: letras()+' letras.'"></li>
<li data-bind="text: vocales()+' vocales.'"></li>
<li data-bind="text: consonantes()+' consonantes.'"></li>
<li data-bind="text: espacios()+' espacios.'"></li>
</ul>
<br>
Migrar el código Java para Dukescript
Nuestro código final para contar elementos de una cadena en Java será:
package dew.demo.string;
import net.java.html.json.Model;
import net.java.html.json.ComputedProperty;
import net.java.html.json.Property;
@Model (className = "StringStatistics", properties = {
@Property (name = "miTexto", type=String.class)
})
class PrimeDemo {
@ComputedProperty static int letras (String miTexto) {
return miTexto.length();
}
@ComputedProperty static int vocales (String miTexto) {
return miTexto.length()-miTexto.replaceAll("[aeiouAEIOU]","").length();
}
@ComputedProperty static int consonantes (String miTexto) {
return miTexto.length()-miTexto.replaceAll("[b-df-hj-np-tv-zB-DF-HJ-NP-TV-Z]","").length();
}
@ComputedProperty static int espacios (String miTexto) {
return miTexto.length()-miTexto.replaceAll("[ ]","").length();
}
static {
new StringStatistics("").applyBindings();
}
}
Puedes hallar la demostración en el siguiente enlace: