Chaîne de remplacement de la méthode est de ne pas remplacer des caractères
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 là quelque chose qui me manque ici.
- Les chaînes sont immuables.
Vous devez vous connecter pour publier un commentaire.
Oui, et puis vous jetez la valeur de retour.
Chaînes de caractères en Java sont immuables - lorsque vous appelez
replace
, il ne modifie pas le contenu de la existant chaîne - elle renvoie une nouveau chaîne avec les modifications. Donc, vous voulez:Cela s'applique à tous les méthodes de String (
substring
,toLowerCase
etc). Aucun 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 n'est pas contenir
"and"
, il n'y a aucun mal à effectuer le remplacement:Chaînes sont immuable, 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 (à lasentence = sentence.replace(this,that)
ou une nouvelle référence, comme on le voit ci-dessous:Que d'un côté, remarque que j'ai enlevé le
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.contains()
appel qui a été la cause d'un problème - il n'était pas. Il était inutile de faire appel, mais il n'a pas fait de causer des problèmes. Le problème a été en raison de l'ignorance de la valeur de retour dereplace
, ce qui n'est pas expliqué dans la réponse.sentence.replace(" and", ",");
Vous ne faites pas n'importe quoi avec la valeur de retour de
replace
. Vous aurez besoin d'affecter le résultat de la méthode, qui est la nouvelleString
:Un
String
est immuable en java. Des méthodes commereplace
de retour d'un nouveauString
.Votre
contains
test est inutile:replace
sera juste no-op si il y ne sont pas les instances du texte à remplacer.Vous devriez ré-affecter le résultat de la substitution, comme ceci:
Être conscient que la
String
classe est immuable, ce qui signifie que tous de ses méthodes de retour d'une nouvelle chaîne et de ne jamais modifier la chaîne d'origine en place, de sorte que le résultat de l'invocation d'une méthode dans une instance deString
doit être affectée à une variable ou d'utiliser immédiatement pour que la modification prenne effet.