Detectar palabras duplicadas con Regex

publicado por: Anonymous

Estoy intentando encontrar todos los elementos duplicados que hay en una frase.

Para ello, estoy probando con el siguiente código, pero únicamente detecto la primera palabra duplicada y me gustaria reemplazar todas, independientemente de que tengan mayúsculas o minúsculas.

Este es mi código:

public static void main(String[] args) {

String regex = "\b(\w+)\s+\1\b+";
Pattern p = Pattern.compile(regex,Pattern.CASE_INSENSITIVE /* Insert the correct Pattern flag here.*/);
Scanner in = new Scanner(System.in);
String input = in.nextLine();
Matcher m = p.matcher(input);
while (m.find()) {
        input = input.replaceAll(m.group(), m.group(1));
    }

    // Prints the modified sentence.
    System.out.println(input);
}

Por ejemplo, en la frase:

Hola hola hOla

Debería de imprimir sólo:

Hola

Actualmente me imprime:

Hola hOla

solución

Prueba con esto:

String regex = "\b(\w+)\b(\s+\1)+\b";

Explicación:

Las b nos indican el límite de la palabra, sin ellas por ejemplo un
"Hola OLA" coincidiría con Hola ya que quitando la H el patron
sería correcto "ola OLA", pero queremos que mire las palabras
completas.

La w nos indica caracter ([a-zA-Z0-9_]) y el + que puede tener varios caracteres de
longitud. Por tanto w+ nos indica que es una palabra.

El s+ nos indica que puede contener uno o mas espacios.

El 1 guarda nuestro primer bloque de la expresión (lo que contenga
w+), por tanto ha de ser igual.

El + final significa que puede repetirse varias veces la expresión
s+1.

Por tanto al final obtenemos una expresión formada por
Palabra1+(Espacio+Palabra), pudiendo repetirse (Espacio+Palabra1) n veces.

Respondido por: Anonymous

Leave a Reply

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