Je cherche à remplacer une valeur de chaîne Java comme suit. Le code ci-dessous 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");
Quelle est la manière la plus simple de réaliser le remplacement ci-dessus?
S'il s'agit d'une fonction que vous utilisez en continu, il y a un problème. Chaque expression régulière est à nouveau compilée pour chaque appel. Il est préférable de les créer sous forme de constantes. Vous pourriez avoir quelque chose comme ça.
private static final Pattern[] patterns = {
Pattern.compile("</?i>"),
Pattern.compile("//"),
// Others
};
private static final String[] replacements = {
"",
"/",
// Others
};
public static String cleanString(String str) {
for (int i = 0; i < patterns.length; i++) {
str = patterns[i].matcher(str).replaceAll(replacements[i]);
}
return str;
}
cleanInst.replaceAll("[<i>]", "");
devrait être:
cleanInst = cleanInst.replaceAll("[<i>]", "");
puisque la classe String
est immuable et ne change pas son état interne, c'est-à-dire que replaceAll()
retourne une nouvelle instance différente de cleanInst
.
Vous devriez lire un tutoriel de base expressions régulières .
Jusque-là, ce que vous avez essayé de faire peut se faire comme ceci:
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");
Vous pourriez probablement chaîner toutes ces opérations de remplacement (mais je ne connais pas la bonne Java pour cela).
À propos des limites des mots : \b
n'a généralement de sens que directement avant ou après un caractère alphanumérique.
Par exemple, \b/n\b
ne correspondra qu'à /n
s'il est directement précédé d'un caractère alphanumérique et suivi d'un caractère non alphanumérique, il correspond donc à "a/n!"
mais non "foo /n bar"
.