86 votes

Utilisation de string.replace () en Java

Double Possible:
Conseils pour java.lang.Chaîne de caractères.remplacer problème?

J'ai une phrase qui est passée comme une chaîne et je suis en train de faire un remplacement sur le mot "et" et je veux le remplacer par " ". Et ce n'est pas de remplacer le mot "et" par un espace blanc. Ci-dessous est un exemple de ma logique. Et quand je debug-ce la logique ne tombent dans la phrase.remplacer.

    String sentence = "Define, Measure, Analyze, Design and Verify"
    if (sentence.contains("and")){
        sentence.replace("and", " ");
    }

Est-il quelque chose qui me manque ici.

179voto

Jon Skeet Points 692016

Et quand je debug-ce la logique ne tombent dans la phrase.remplacer.

Oui, et puis vous jetez la valeur de retour.

Chaînes de caractères en Java sont immuables - lorsque vous appelez replace, cela ne change pas le contenu de l' existant à la chaîne, il renvoie une nouvelle chaîne avec les modifications. Donc, vous voulez:

sentence = sentence.replace("and", " ");

Cela s'applique à toutes les méthodes de Chaîne (substring, toLowerCase etc). Aucun d'entre eux de modifier le contenu de la chaîne.

Notez que vous n'avez pas vraiment besoin de le faire dans un condition - après tout, si la phrase ne contiennent "and", il n'y a aucun mal à effectuer le remplacement:

String sentence = "Define, Measure, Analyze, Design and Verify";
sentence = sentence.replace("and", " ");

69voto

Kumar Vivek Mitra Points 19369

Les chaînes sont immuables, ce qui signifie que leur contenu ne peut pas changer. Lorsque vous appelez replace(this,that) vous vous retrouvez avec une toute nouvelle Chaîne. Si vous voulez conserver une copie, vous devez l'affecter à une variable. Vous pouvez remplacer l'ancienne référence (la sentence = sentence.replace(this,that) ou une nouvelle référence, comme on le voit ci-dessous:

public class Test{

    public static void main(String[] args) {

        String sentence = "Define, Measure, Analyze, Design and Verify";

        String replaced = sentence.replace("and", "");
        System.out.println(replaced);

    }
}

En passant, notez que j'ai supprimé l' contains() vérifier, comme il est inutile de faire appel ici. Si elle n'a pas le contenir, le remplacer sera juste pas à en faire des remplacements. Vous ne voulez que contient la méthode, si ce que vous êtes en remplaçant était autre que la véritable condition que vous vérifiez.

9voto

pb2q Points 28514

Vous ne faites rien avec la valeur de retour de replace . Vous devrez assigner le résultat de la méthode, qui est le nouveau String :

 sentence = sentence.replace("and", " ");
 

A String est immuable en Java. Des méthodes comme replace renvoient un nouveau String .

Votre test contains n'est pas nécessaire: replace ne sera tout simplement pas opérationnel s'il n'y a aucune occurrence du texte à remplacer.

8voto

Óscar López Points 97105

Vous devez réaffecter le résultat du remplacement, comme suit:

  sentence = sentence.replace("and", " ");
 

Sachez que la classe String est immuable , ce qui signifie que toutes ses méthodes renvoient une nouvelle chaîne et ne modifient jamais la chaîne d'origine sur place. Le résultat de l'appel d'une méthode dans une instance de String doit être affecté à une variable ou utilisé immédiatement pour que la modification soit prise en compte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X