¿Cómo contar las palabras que hay en un texto en Java?

publicado por: Anonymous

Necesito contar las palabras de un texto, pero teniendo en cuenta que el texto puede tener, saltos de línea, tabuladores, espacios duplicados entre palabras.

Es decir con el texto:

lorem impsum
armet amet, hello     world

con un str.split(" ") cuando la línea termina con n no lo tiene en cuenta y me cuenta como si fuera una sola palabra impsumarmet

solución

Puedes utilizar "\s+|n" como regexp para separar las palabras:

String text = "lorem impsumnarmet amet, hello     world";
System.out.println(text.split("\s+|n").length);

Salida:

6

Utiliza el operador pipe | para separar los caracteres tal como necesitas. Aquí otro ejemplo basado en tu cadena de ejemplo:

//la coma separa a amet y hello
String text = "lorem impsumnarmet amet,hello     world";
System.out.println(text.split("\s+|n|,").length);

Salida:

6

Ahora, si tu texto puede ser muy extenso, considera que String#split va a generar un arreglo con todas las distintas palabras que pueden haber en él y puede ser un arreglo muy grande en memoria. Si tienes la memoria como limitante, esto puede ser un problema. Una mejor estrategia sería consumir línea por línea y contar las palabras que hay en cada línea. Puedes utilizar un Scanner para ayudarte:

String texto = "texto con muchosnsaltos denlínea";
Scanner scannerTexto = new Scanner(texto);
int contador = 0;
while(scannerTexto.hasNextLine()) {
    String linea = scannerTexto.nextLine();
    contador += linea.split("\s+").length;
}
scannerTexto.close();

Pero si sabes que no habrán casos extraños como dos palabras juntas por un símbolo como `”amet,hello” entonces puedes reducir el código anterior para que lea mientras encuentre palabras:

while(scannerTexto.hasNext()) {
    scannerTexto.next();
    contador ++;
}
Respondido por: user227

Leave a Reply

Your email address will not be published. Required fields are marked *