Pas élégant, peut-être que d'autres approches, mais il est assez solide et facile à suivre, esp. pour les personnes plus récente de Java. Une chose qui me met sur la classe String est ceci: Il a été autour pendant un temps très long et, tandis qu'il prend en charge un remplacement global avec les regexp et un remplacement global avec des Chaînes de caractères (via CharSequences), cette dernière ne dispose pas d'un simple paramètre booléen: 'isCaseInsensitive'. Vraiment, vous auriez ai pensé que, tout en ajoutant qu'un petit interrupteur, toutes les difficultés que son absence entraîne pour les débutants en particulier, auraient pu être évités. Maintenant sur le JDK 7, Chaîne encore ne prend pas en charge ce petit plus!
Enfin, bref, je vais arrêter de ronchonner. Pour tout le monde, en particulier la plus récente de Java, voici votre "couper et coller" deus ex machina. Comme je l'ai dit, pas élégant, et pas de victoire vous toute nappe de codage des prix, mais il fonctionne et qui est fiable. Tout commentaire, n'hésitez pas à contribuer. (Oui, je sais, StringBuffer est probablement un meilleur choix de gérer les deux chaîne de caractères mutation lignes, mais il est assez facile de permuter les techniques.)
public String replaceAll(String findtxt, String replacetxt, String str,
boolean isCaseInsensitive) {
if (str == null) {
return null;
}
if (findtxt == null || findtxt.length() == 0) {
return str;
}
if (findtxt.length() > str.length()) {
return str;
}
int counter = 0;
String thesubstr = "";
while ((counter < str.length())
&& (str.substring(counter).length() >= findtxt.length())) {
thesubstr = str.substring(counter, counter + findtxt.length());
if (isCaseInsensitive) {
if (thesubstr.equalsIgnoreCase(findtxt)) {
str = str.substring(0, counter) + replacetxt
+ str.substring(counter + findtxt.length());
// Failing to increment counter by replacetxt.length() leaves you open
// to an infinite-replacement loop scenario: Go to replace "a" with "aa" but
// increment counter by only 1 and you'll be replacing 'a's forever.
counter += replacetxt.length();
} else {
counter++; // No match so move on to the next character from
// which to check for a findtxt string match.
}
} else {
if (thesubstr.equals(findtxt)) {
str = str.substring(0, counter) + replacetxt
+ str.substring(counter + findtxt.length());
counter += replacetxt.length();
} else {
counter++;
}
}
}
return str;
}