web-dev-qa-db-fra.com

Comment remplacer une sous-chaîne d'une chaîne

En supposant que j'ai une chaîne string comme ceci:

"abcd=0; efgh=1"

et je veux remplacer "abcd" par "dddd". J'ai essayé de faire une chose pareille:

string.replaceAll("abcd","dddd");

Ça ne marche pas. Aucune suggestion?

EDIT: Pour être plus précis, je travaille dans Java et j'essaie d'analyser le document HTML, concrètement le contenu entre les balises <script>. J'ai déjà trouvé un moyen d'analyser ce contenu dans une chaîne:

 if(tag instanceof ScriptTag){
        if(((ScriptTag) tag).getStringText().contains("DataVideo")){
            String tagText = ((ScriptTag)tag).getStringText();
      }
}

Maintenant, je dois trouver un moyen de remplacer une sous-chaîne par une autre.

49
MichalB

Vous devez utiliser la valeur de retour de la méthode replaceAll() . replaceAll() ne remplace pas les caractères de la chaîne en cours, il retourne une nouvelle chaîne avec remplacement.

  • Les objets chaîne étant immuables, leurs valeurs ne peuvent plus être modifiées après leur création.
  • Vous pouvez utiliser replace () au lieu de replaceAll () si vous n'avez pas besoin de regex.
    String str = "abcd=0; efgh=1";
    String replacedStr = str.replaceAll("abcd", "dddd");

    System.out.println(str);
    System.out.println(replacedStr);

les sorties

abcd=0; efgh=1
dddd=0; efgh=1
71
Alper

2 choses à noter:

  1. Les chaînes dans Java sont immuables, vous devez donc stocker la valeur de retour de l'appel de méthode placePlace dans une autre chaîne.
  2. Vous n'avez pas vraiment besoin d'une regex ici, il suffit d'un simple appel à String#replace(String) qui fera l'affaire.

Alors utilisez simplement ce code:

String replaced = string.replace("abcd", "dddd");
13
anubhava

Vous devez créer la variable à laquelle attribuer la nouvelle valeur, comme ceci:

String str = string.replaceAll("abcd","dddd");
12
EddyR

Par regex, je pense que c'est Java, la méthode replaceAll() renvoie une nouvelle chaîne avec les sous-chaînes remplacées, alors essayez ceci:

String teste = "abcd=0; efgh=1";

String teste2 = teste.replaceAll("abcd", "dddd");

System.out.println(teste2);

Sortie:

dddd=0; efgh=1
5
Ricardo Cacheira

Notez que les barres obliques inverses (_\_) et les signes dollar (_$_) dans la chaîne de remplacement peuvent entraîner des résultats différents de ceux obtenus si elle était traitée comme une chaîne de remplacement littéral; voir Matcher.replaceAll . Utilisez Matcher.quoteReplacement(Java.lang.String) pour supprimer la signification particulière de ces caractères, si vous le souhaitez.

de javadoc .

3
Amr Lotfy

En javascript:

var str = "abcdaaaaaabcdaabbccddabcd";
document.write(str.replace(/(abcd)/g,"----"));
//example output: ----aaaaa----aabbccdd----

Dans d'autres langues, ce serait quelque chose de similaire. N'oubliez pas d'activer les correspondances globales.

0
Isaac

Vous ne l'assignez probablement pas après avoir effectué le remplacement ou remplacé la mauvaise chose. Essayez:

String haystack = "abcd=0; efgh=1";
String result = haystack.replaceAll("abcd","dddd");
0
Bwire