Je souhaite remplacer plusieurs chaînes insensibles à la casse d'une chaîne.
J'aurais pu utiliser:
org.apache.commons.lang.StringUtils.replaceEach (text, searchList, replacementList)
mais fonctionne pour les chaînes sensibles à la casse.
méthode similaire qui fonctionne pour les chaînes insensibles à la casse?
My nick name is Abhi
Résultat:
My name is Abhishek
Attendu:
static String[] old = {"ABHISHEK","Name"}; static String[] nw = {"Abhi","nick name"}; static String s="My name is Abhishek"; System.out.println(StringUtils.replaceEach(s, old, nw));
3 Réponses :
Vous pouvez essayer d'utiliser regex pour l'archiver
Exemple
XXX
Résultat:
Après remplacement: Abhiskek Abhiskek Abhiskek Abhiskek
EDIT
str.replaceAll("(?i)" + Pattern.quote(old[i]), nw[i]);
Résultat:
Mon surnom est Abhi
Idéal de base: Regex ignore la casse et replaceAll ()
À partir du commentaire @flown (Merci), vous devez utiliser p >
String[] old = {"ABHISHEK","Name"}; String[] nw = {"Abhi","nick name"}; String s="My name is Abhishek"; //make sure old and nw have same size please for(int i =0; i < old.length; i++) { s = s.replaceAll("(?i)"+old[i], nw[i]); } System.out.println(s);
Parce que regex traite certains caractères spéciaux avec une signification différente, ex: .
comme n'importe quel caractère unique
Donc, utiliser le Pattern.quote
fera cela.
Je souhaite remplacer plusieurs chaînes en une seule fois. Je passe le tableau String.
@Ivar vous pouvez utiliser str.replaceAll ("(? I)" + Pattern.quote (old [i]), nw [i])
@DangNguyen: Avez-vous essayé d'exécuter ce programme? Cela me donne Sortie: Mon surnom est Abhishek
Désolé mon mauvais. oui ça a marché. Existe-t-il un moyen de battre en java 8 en utilisant des flux pour obtenir la même chose?
en JAVA, les chaînes sont sensibles à la casse; si vous souhaitez les utiliser insensibles, vous devez utiliser des méthodes appropriées.
par exemple equals ()
est vraiment différent avec equalsIgnoreCase ()
.
Vous pouvez utiliser:
compareToIgnoreCase()
Ou :
String.equalsIgnoreCase()
et si ces méthodes renvoient des données appropriées, vous pouvez les utiliser pour les remplacer par la chaîne de votre choix.
Puisque vous utilisez déjà StringUtils
, StringUtils.replaceIgnoreCase est un bon candidat. Il convient de mentionner que la version 3.5+
est requise.
s = replaceIgnoreCase(s, old, nw);Remplace insensible à la casse toutes les occurrences d'une chaîne dans une autre Chaîne.
Une référence nulle passée à cette méthode est un no-op.
public static String replaceIgnoreCase(final String s, final String searchList[], final String replacementList[]) { if (searchList.length != replacementList.length) throw new IllegalArgumentException("Search list and replacement list sizes do not match"); String replaced = s; for (int i = 0; i < searchList.length; i++) { replaced = StringUtils.replaceIgnoreCase(s, searchList[i], replacementList[i]); } return replaced; }
Dans votre cas:
My nick name is Abhi
Sortie:
String[] old = {"ABHISHEK", "Name"}; String[] nw = {"Abhi", "nick name"}; String s = "My name is Abhishek"; for (int i = 0; i < old.length; i++) { s = StringUtils.replaceIgnoreCase(s, old[i], nw[i]); } System.out.println(s);
Vous pouvez même créer une méthode d'assistance si vous comptez l'utiliser fréquemment:
StringUtils.replaceIgnoreCase(null, *, *) = null StringUtils.replaceIgnoreCase("", *, *) = "" StringUtils.replaceIgnoreCase("any", null, *) = "any" StringUtils.replaceIgnoreCase("any", *, null) = "any" StringUtils.replaceIgnoreCase("any", "", *) = "any" StringUtils.replaceIgnoreCase("aba", "a", null) = "aba" StringUtils.replaceIgnoreCase("abA", "A", "") = "b" StringUtils.replaceIgnoreCase("aba", "A", "z") = "zbz"
Et utilisez-le comme vous utiliseriez un appel à la bibliothèque:
public static String replaceIgnoreCase(String text, String searchString, String replacement)
La méthode replaceIgnoreCase (String, String, String) n'est pas définie pour le type StringUtils. J'utilise commons-lang-2.6.jar
"Existe-t-il une méthode similaire qui fonctionne pour les chaînes insensibles à la casse?" Nan. Vous devrez en écrire un vous-même.