Je modifie un e-mail provenant de tesseract ocr.
Voici mon code:
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;
Mais la sortie n'est pas correcte.
Entrée:
amrut=ac.hrworks@g mai|.com
Sortie:
lalcl.lhlrlwlolrlklsl@lglmlalil|l.lclolml
Mais lorsque j'ai affecté le résultat à une nouvelle chaîne après chaque remplacement, cela fonctionne très bien. Pourquoi l'affectation continue dans la même chaîne ne fonctionne pas?
Vous noterez dans le Javadoc pour String.replaceAll () que le premier argument est un expression régulière .
Une période (.
) y a une signification particulière, tout comme un tuyau (|
) tout comme une accolade (}
). Vous devez tous les échapper, tels que:
email = email.replaceAll("gmaii\\.com", "gmail.com");
(Est-ce Java?)
Notez qu'en Java, replaceAll accepte une expression régulière et le point correspond à n'importe quel caractère. Vous devez échapper au point ou utiliser
somestring.replaceAll(Pattern.quote("gmail.com"), "replacement");
Notez également la faute de frappe ici:
email = emai.replaceAll("canear", "career");
devrait être
email = email.replaceAll("canear", "career");
En réalisant que replaceAll()
le premier argument est regex
vous pouvez faire vos comparaisons beaucoup moins
Par exemple, vous pouvez vérifier les éventuelles fautes d'orthographe du mot career
par le biais de regex
email = email.replaceAll("ca[n|r][e|a][e|a]r", "career"));
Vous devez vous échapper .
par \\.
comme suit:
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;
Vous utilisez des caractères regex.
Veuillez les échapper en utilisant \
ou en utilisant Pattern.quote
méthode
Je pense que vous ne savez pas que le premier paramètre de replaceAll
est regex.
.
, |
, }
pourrait être interprété différemment de vos attentes.
. Any character (may or may not match line terminators)
http://docs.Oracle.com/javase/6/docs/api/Java/util/regex/Pattern.html
Pour l'espace que vous utilisez mieux
\s A whitespace character: [ \t\n\x0B\f\r]
et échappez à d'autres caractères spéciaux avec un \\