special matches example characters all java string str-replace

java - matches - String.replaceAll() no está funcionando



replaceall java special characters (6)

Estoy editando un correo electrónico que recibí de tesseract ocr.

Aquí está mi código:

if (email != null) { email = email.replaceAll(" ", ""); email = email.replaceAll("caneer", "career"); email = email.replaceAll("canaer", "career"); email = email.replaceAll("canear", "career"); email = email.replaceAll("caraer", "career"); email = email.replaceAll("carear", "career"); email = email.replace("|", "l"); email = email.replaceAll("}", "j"); email = email.replaceAll("j3b", "job"); email = email.replaceAll("gmaii.com", "gmail.com"); email = email.replaceAll("hotmaii.com", "hotmail.com"); email = email.replaceAll(".c0m", ".com"); email = email.replaceAll(".coin", ".com"); email = email.replaceAll("consuit", "consult"); } return email;

Pero la salida no es correcta.

Entrada:

amrut=ac.hrworks@g mai|.com

Salida:

lalcl.lhlrlwlolrlklsl@lglmlalil|l.lclolml

Pero cuando asigné el resultado a una nueva Cadena después de cada reemplazo, funciona bien. ¿Por qué la asignación continua en la misma cadena no funciona?


(¿Esto es Java?)

Tenga en cuenta que en Java, replaceAll acepta una expresión regular y el punto coincide con cualquier carácter. Necesitas escapar del punto o usar

somestring.replaceAll(Pattern.quote("gmail.com"), "replacement");

También tenga en cuenta el error tipográfico aquí:

email = emai.replaceAll("canear", "career");

debiera ser

email = email.replaceAll("canear", "career");


Al darse cuenta de que el primer argumento replaceAll() es regex , puede hacer sus comparaciones mucho menos

Por ejemplo, puede verificar posibles errores ortográficos de la palabra career en el siguiente regex

email = email.replaceAll("ca[n|r][e|a][e|a]r", "career"));


Creo que no sabe que el primer parámetro de replaceAll es regex.

. , | , } puede interpretarse de una manera diferente a su expectativa.

. Any character (may or may not match line terminators)

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

Por espacio que mejor utilices.

/s A whitespace character: [ /t/n/x0B/f/r]

y escapar de otros personajes especiales con un líder //


Estás utilizando algunos caracteres regex.

Por favor, Pattern.quote usando / o usando el método Pattern.quote


Tienes que escapar por //. como siguiente

if (email != null) { email = email.replaceAll(" ", ""); email = email.replaceAll("caneer", "career"); email = email.replaceAll("canaer", "career"); email = email.replaceAll("canear", "career"); email = email.replaceAll("caraer", "career"); email = email.replaceAll("carear", "career"); email = email.replace("|", "l"); email = email.replaceAll("}", "j"); email = email.replaceAll("j3b", "job"); email = email.replaceAll("gmaii//.com", "gmail.com"); email = email.replaceAll("hotmaii//.com", "hotmail.com"); email = email.replaceAll("//.c0m", "com"); email = email.replaceAll("//.coin", "com"); email = email.replaceAll("consuit", "consult"); } return email;


Notarás en el Javadoc para String.replaceAll () que el primer argumento es una expresión regular .

Un punto ( . ) Tiene un significado especial allí, al igual que una tubería ( | ), al igual que una abrazadera ( } ). Necesitas escapar de todos ellos, tales como:

email = email.replaceAll("gmaii//.com", "gmail.com");