À l'aide de la méthode replace(CharSequence target, CharSequence replacement)
de String, comment puis-je rendre la cible insensible à la casse?
Par exemple, la façon dont cela fonctionne actuellement:
String target = "FooBar";
target.replace("Foo", "") // would return "Bar"
String target = "fooBar";
target.replace("Foo", "") // would return "fooBar"
Comment puis-je faire en sorte que le remplacement (ou s'il existe une méthode plus appropriée) ne soit pas sensible à la casse pour que les deux exemples renvoient "Bar"?
target.replaceAll("(?i)"+Pattern.quote("foo"), "");
Si vous ne vous souciez pas du cas, alors peut-être que cela n'a pas d'importance s'il renvoie tout le cas:
la source
Pas aussi élégant peut-être que d'autres approches, mais c'est assez solide et facile à suivre, en particulier. pour les nouveaux utilisateurs de Java. Une chose qui m'intéresse à propos de la classe String est la suivante: elle existe depuis très longtemps et bien qu'elle prenne en charge un remplacement global par une expression régulière et un remplacement global par des chaînes (via CharSequences), ce dernier n'a pas de paramètre booléen simple : 'isCaseInsensitive'. Vraiment, vous auriez pensé qu'en ajoutant simplement ce petit interrupteur, tous les problèmes que son absence cause aux débutants en particulier auraient pu être évités. Maintenant sur JDK 7, String ne prend toujours pas en charge ce petit ajout!
Enfin bref, je vais arrêter de me plaindre. Pour tout le monde, en particulier les nouveaux utilisateurs de Java, voici votre deus ex machina à copier-coller . Comme je l'ai dit, pas aussi élégant et ne vous rapportera pas de prix de codage, mais cela fonctionne et est fiable. Tous les commentaires, n'hésitez pas à contribuer. (Oui, je sais, StringBuffer est probablement un meilleur choix pour gérer les deux lignes de mutation de chaîne de caractères, mais il est assez facile d'échanger les techniques.)
la source
Les expressions régulières sont assez complexes à gérer en raison du fait que certains caractères sont réservés: par exemple,
"foo.bar".replaceAll(".")
produit une chaîne vide, car le point signifie "n'importe quoi". Si vous souhaitez remplacer, seul le point doit être indiqué en paramètre"\\."
.Une solution plus simple consiste à utiliser des objets StringBuilder pour rechercher et remplacer du texte. Il en faut deux: un qui contient le texte en version minuscule tandis que le second contient la version originale. La recherche est effectuée sur le contenu en minuscules et l'index détecté remplacera également le texte d'origine.
la source
Pour les caractères non Unicode:
la source
org.apache.commons.lang3.StringUtils:
public static String replaceIgnoreCase (String text, String searchString, String replacement)
La casse remplace de manière insensible toutes les occurrences d'une chaîne dans une autre chaîne.
la source
J'aime la réponse de smas qui utilise une expression régulière. Si vous allez faire le même remplacement plusieurs fois, il est logique de précompiler l'expression régulière une fois:
replaceAll
la source
Simplifiez-vous la vie sans bibliothèques tierces:
la source