Ich habe einen Satz, der als Zeichenfolge übergeben wird, und ich ersetze das Wort "und" und möchte ihn durch "" ersetzen. Und es ersetzt nicht das Wort "und" durch Leerzeichen. Unten ist ein Beispiel meiner Logik. Und wenn ich dies debugge, fällt die Logik in den Satz.
String sentence = "Define, Measure, Analyze, Design and Verify"
if (sentence.contains("and")){
sentence.replace("and", " ");
}
Fehlt mir hier etwas?
Antworten:
Ja, und dann verwerfen Sie den Rückgabewert.
Zeichenfolgen in Java sind unveränderlich. Wenn Sie aufrufen
replace
, wird der Inhalt der vorhandenen Zeichenfolge nicht geändert. Es wird eine neue Zeichenfolge mit den Änderungen zurückgegeben. Also du möchtest:sentence = sentence.replace("and", " ");
Dies gilt für alle Verfahren , die in String (
substring
,toLowerCase
usw.). Keiner von ihnen ändert den Inhalt der Zeichenfolge.Beachten Sie, dass Sie dies unter bestimmten Bedingungen nicht wirklich tun müssen. Wenn der Satz keinen Satz enthält
"and"
, schadet es schließlich nicht, den Ersatz durchzuführen:String sentence = "Define, Measure, Analyze, Design and Verify"; sentence = sentence.replace("and", " ");
quelle
Zeichenfolgen sind unveränderlich , dh ihr Inhalt kann sich nicht ändern. Wenn Sie anrufen, erhalten
replace(this,that)
Sie einen völlig neuen String. Wenn Sie diese neue Kopie behalten möchten, müssen Sie sie einer Variablen zuweisen. Sie können die alte Referenz überschreiben (a lasentence = sentence.replace(this,that)
oder eine neue Referenz wie unten gezeigt: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); } }
Beachten Sie außerdem, dass ich den
contains()
Scheck entfernt habe , da es sich hier um einen unnötigen Aufruf handelt. Wenn es nicht enthalten ist, kann das Ersetzen einfach keine Ersetzungen vornehmen. Sie möchten nur, dass diese Methode enthält, wenn sich das, was Sie ersetzen, von dem tatsächlichen Zustand unterscheidet, den Sie überprüfen.quelle
contains()
Anruf ist, der ein Problem verursacht hat - es war nicht so. Es war ein unnötiger Anruf, der jedoch keine Probleme verursachte. Das Problem war darauf zurückzuführen, dass der Rückgabewert von ignoriert wurdereplace
, was in der Antwort überhaupt nicht erklärt wird.sentence.replace(" and", ",");
Sie machen nichts mit dem Rückgabewert von
replace
. Sie müssen das Ergebnis der neuen Methode zuweisenString
:sentence = sentence.replace("and", " ");
A
String
ist in Java unveränderlich. Methoden wiereplace
ein neues zurückgebenString
.Ihr
contains
Test ist nicht erforderlich:replace
Wird nur dann nicht ausgeführt, wenn keine zu ersetzenden Textinstanzen vorhanden sind.quelle
Sie sollten das Ergebnis des Austauschs wie folgt neu zuweisen:
sentence = sentence.replace("and", " ");
Beachten Sie, dass die
String
Klasse unveränderlich ist. Dies bedeutet, dass alle Methoden eine neue Zeichenfolge zurückgeben und die ursprüngliche Zeichenfolge niemalsString
direkt ändern. Daher muss das Ergebnis des Aufrufs einer Methode in einer Instanz von einer Variablen zugewiesen oder sofort für die verwendet werden ändern, um wirksam zu werden.quelle
package com.tulu.ds; public class EmailSecurity { public static void main(String[] args) { System.out.println(returnSecuredEmailID("[email protected]")); } private static String returnSecuredEmailID(String email){ String str=email.substring(1, email.lastIndexOf("@")-1); return email.replaceAll(email.substring(1, email.lastIndexOf("@")-1),replacewith(str.length(),"*")); } private static String replacewith(int length,String replace) { String finalStr=""; for(int i=0;i<length;i++){ finalStr+=replace; } return finalStr; } }
quelle