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");