Je cherche à remplacer une valeur de chaîne Java comme suit. Sous le code ne fonctionne pas.
cleanInst.replaceAll("[<i>]", ""); cleanInst.replaceAll("[</i>]", ""); cleanInst.replaceAll("[//]", "/"); cleanInst.replaceAll("[\bPhysics Dept.\b]", "Physics Department"); cleanInst.replaceAll("[\b/n\b]", ";"); cleanInst.replaceAll("[\bDEPT\b]", "The Department"); cleanInst.replaceAll("[\bDEPT.\b]", "The Department"); cleanInst.replaceAll("[\bThe Dept.\b]", "The Department"); cleanInst.replaceAll("[\bthe dept.\b]", "The Department"); cleanInst.replaceAll("[\bThe Dept\b]", "The Department"); cleanInst.replaceAll("[\bthe dept\b]", "The Department"); cleanInst.replaceAll("[\bDept.\b]", "The Department"); cleanInst.replaceAll("[\bdept.\b]", "The Department"); cleanInst.replaceAll("[\bdept\b]", "The Department");
3 Réponses :
cleanInst = cleanInst.replaceAll("[<i>]", "");
Vous devriez lire une base tutoriel d'expressions régulières .
jusque-là, quoi Vous avez essayé de faire peut être fait comme ceci: P>
cleanInst = cleanInst.replace("//", "/"); cleanInst = cleanInst.replaceAll("</?i>", ""); cleanInst = cleanInst.replaceAll("/n\\b", ";") cleanInst = cleanInst.replaceAll("\\bPhysics Dept\\.", "Physics Department"); cleanInst = cleanInst.replaceAll("(?i)\\b(?:the )?dept\\b\\.?", "The Department");
+1 Votre réponse est plutôt bonne, mais pourquoi le groupe de non-capture pour "the"? Est-ce juste "performance"? Cos IMHO La lisibilité tombe plus que les augmentations de performance. Btw je soupçonne / n code> est censé être
\ n code>
Je suis juste habitué à le faire comme ça. Je n'utilise jamais de saisir des parenthèses à moins que je ne veux capturer un groupe. Je conviens qu'il y a une tension entre dire clairement ses intentions et sa lisibilité.
S'il s'agit d'une fonction que vous utilisez continuellement, il y a un problème. Chaque expression régulière est compilée à nouveau pour chaque appel. Il est préférable de les créer comme des constantes. Vous pourriez avoir quelque chose comme ça.
Au lieu de Motif code>, nous avons maintenant
matcher code> Les objets créés à chaque fois. Comment est-ce mieux?
Parce que la compilation d'un motif de regex est plus coûteuse que de créer un correspondant pour un motif (pré-compilé)?
Que voulez-vous dire par ne fonctionne pas?
Retirez les crochets (
[ code> et
] code>). Ce sont pour les classes de caractères. Si quelque chose d'autre ne fonctionne pas, vous devrez être plus précis.
Êtes-vous au courant de ce qu'est une classe de personnages dans une regex? Regex.info
Les chaînes sont immuables b>.
et ignorer le modificateur de cas fonctionnerait pour beaucoup de
code> remplace
Comme @slaks a souligné: les chaînes sont immuables. Votre code ne fera rien si vous ne stockez pas la valeur de retour de
string.replaceall () code> quelque part. À l'heure actuelle, votre code ne fait rien avec la valeur de retour.