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.
Réponses
Trop de publicités?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", " ");
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.
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.
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.