Ich möchte das letzte Zeichen aus einer Zeichenfolge entfernen. Ich habe versucht, dies zu tun:
public String method(String str) {
if (str.charAt(str.length()-1)=='x'){
str = str.replace(str.substring(str.length()-1), "");
return str;
} else{
return str;
}
}
Ermitteln der Länge der Zeichenfolge - 1 und Ersetzen des letzten Buchstabens durch nichts (Löschen). Bei jedem Ausführen des Programms werden jedoch mittlere Buchstaben gelöscht, die mit dem letzten Buchstaben identisch sind.
Zum Beispiel ist das Wort "Bewunderer"; Nachdem ich die Methode ausgeführt habe, erhalte ich "admie". Ich möchte, dass es das Wort bewundern zurückgibt.
null != str &&
zu Beginn des Schecks hinzufügen .str != null &&
!if (str = NULL)
was nicht nur immer als falsch ausgewertet wird (NULL == 0 == falsch), sondern auch einen Wert zuweist ,str
dem höchstwahrscheinlich nicht das entspricht, was Sie tun wollten. Sie konnten jedoch nicht schreiben,if (NULL = str)
da NULL keine Variable ist und nicht zugewiesen werden kann. Es ist also sicherer, den NULL-Wert links zu setzen. Dies ist jedoch kein Problem in Java.Warum nicht nur ein Liner?
Vollständiger Code
Demo
quelle
return str.substring(0,str.length()-1);
als VerbesserungDa wir uns mit einem Thema befassen, kann man auch reguläre Ausdrücke verwenden
quelle
Das beschriebene Problem und die vorgeschlagenen Lösungen beziehen sich manchmal auf das Entfernen von Separatoren. Wenn dies Ihr Fall ist, schauen Sie sich Apache Commons StringUtils an. Es gibt eine Methode namens removeEnd die sehr elegant ist.
Beispiel:
Würde ergeben: "string 1 | string 2 | string 3"
quelle
quelle
Versuchen Sie nicht, das Rad neu zu erfinden, während andere bereits Bibliotheken geschrieben haben, um Zeichenfolgenmanipulationen durchzuführen:
org.apache.commons.lang3.StringUtils.chop()
quelle
Benutze das:
quelle
Für den Fall , Sie versuchen zu Stammzellen englischen Wörtern
Unterschied zwischen Lucene-Stemmern: EnglishStemmer, PorterStemmer, LovinsStemmer beschreiben einige Java-Optionen.
quelle
In Kotlin können Sie die dropLast () -Methode der Zeichenfolgenklasse verwenden. Die angegebene Nummer wird aus der Zeichenfolge entfernt und eine neue Zeichenfolge zurückgegeben
quelle
Was die Lesbarkeit betrifft, finde ich dies am prägnantesten
Die negativen Indizes können im StringUtils-Dienstprogramm von Apache verwendet werden. Alle negativen Zahlen werden ab dem Ende der Zeichenfolge vom Versatz behandelt.
quelle
Entfernt das letzte Vorkommen von 'xxx':
Entfernt das letzte Vorkommen von 'xxx', wenn es das letzte ist:
Sie können das 'xxx' ersetzen, wenn Sie möchten, aber achten Sie auf spezielle Zeichen
quelle
quelle
quelle
Schauen Sie sich die StringBuilder-Klasse an:
quelle
quelle
Eine einzeilige Antwort (nur eine lustige Alternative - probieren Sie dies nicht zu Hause aus und es gibt bereits großartige Antworten):
quelle
Warum nicht die Escape-Sequenz verwenden ...!
Das Leben ist jetzt viel einfacher. XD! ~ Ein lesbarer Einzeiler
quelle
Die meisten Antworten hier haben Ersatzpaare vergessen .
Zum Beispiel passt das Zeichen 𝕫 (Codepunkt U + 1D56B) nicht in ein einzelnes
char
Zeichen. Um dargestellt zu werden, muss es ein Ersatzpaar aus zwei Zeichen bilden.Wenn man einfach die aktuell akzeptierte Antwort anwendet (mit
str.substring(0, str.length() - 1)
spleißt man das Ersatzpaar, was zu unerwarteten Ergebnissen führt.Man sollte auch prüfen, ob das letzte Zeichen ein Ersatzpaar ist:
quelle
IndexOutOfBoundsException
? (zB ist es möglich, dass Character.isSurrogate true zurückgibt, wenn tatsächlich kein Zeichen davor steht, wasstr.length()-cut
negativ ist).2
durchMath.min(2, str.length())
.Java 8
Ausgabe: test-ab
quelle
Ich verwende dies in meinem Code, es ist einfach und unkompliziert. Es funktioniert nur, wenn der String> 0 ist. Ich habe ihn mit einer Schaltfläche verbunden und in der folgenden if- Anweisung
quelle
quelle
wenn Sie einen besonderen Charakter haben wie; Verwenden Sie in json einfach String.replace (";", ""), andernfalls müssen Sie alle Zeichen in der Zeichenfolge abzüglich der letzten neu schreiben.
quelle
So machen Sie das Zeichen in der Rekursion am Ende:
zum Beispiel:
quelle
Hier ist eine Antwort, die mit Codepunkten außerhalb der mehrsprachigen Grundebene (Java 8+) funktioniert.
Verwenden von Streams:
Effizienter vielleicht:
quelle
Wir können Teilzeichenfolgen verwenden. Hier ist das Beispiel:
quelle
Ersetzen Sie einfach die Bedingung "wenn" wie folgt:
Dies wird den Trick für Sie tun.
quelle
Angenommen, die Gesamtlänge meiner Zeichenfolge = 24 Ich möchte das letzte Zeichen nach Position 14 bis zum Ende ausschneiden, dh ich möchte, dass Start 14 dort ist. Also wende ich folgende Lösung an.
quelle
Ich musste Code für ein ähnliches Problem schreiben. Eine Möglichkeit, die ich lösen konnte, war eine rekursive Codierungsmethode.
Der größte Teil des Codes, den ich zu diesem Thema gesehen habe, verwendet keine Rekursion. Hoffentlich kann ich Ihnen oder jemandem helfen, der das gleiche Problem hat.
quelle
Kinderleicht:
quelle
Dies ist die einzige Möglichkeit, das letzte Zeichen in der Zeichenfolge zu entfernen:
quelle