it-swarm.com.de

Wie entferne ich das letzte Zeichen aus einem String?

Ich möchte das letzte Zeichen aus einer Zeichenfolge entfernen. Ich habe es versucht:

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;
    }
}

Die Länge des Strings erhalten - 1 und den letzten Buchstaben durch nichts ersetzen (löschen), aber bei jedem Programmstart werden mittlere Buchstaben gelöscht, die dem letzten Buchstaben entsprechen.

Zum Beispiel ist das Wort "Bewunderer"; Nachdem ich die Methode ausgeführt habe, bekomme ich "admie". Ich möchte, dass das Wort bewundert wird.

386
duaprog137

replace ersetzt alle Instanzen eines Briefes. Alles was Sie tun müssen, ist substring() :

public String method(String str) {
    if (str != null && str.length() > 0 && str.charAt(str.length() - 1) == 'x') {
        str = str.substring(0, str.length() - 1);
    }
    return str;
}
553
Gary Buyn

Warum nicht nur ein Liner?

private static String removeLastChar(String str) {
    return str.substring(0, str.length() - 1);
}

Vollständiger Code

import Java.util.*;
import Java.lang.*;

public class Main {
    public static void main (String[] args) throws Java.lang.Exception {
        String s1 = "Remove Last CharacterY";
        String s2 = "Remove Last Character2";
        System.out.println("After removing s1==" + removeLastChar(s1) + "==");
        System.out.println("After removing s2==" + removeLastChar(s2) + "==");

    }

    private static String removeLastChar(String str) {
        return str.substring(0, str.length() - 1);
    }
}

Demo

202
Fahim Parkar

Da wir ein Thema haben, können auch reguläre Ausdrücke verwendet werden

"aaabcd".replaceFirst(".$",""); //=> aaabc  
78
iddqd

Das beschriebene Problem und die vorgeschlagenen Lösungen beziehen sich manchmal auf das Entfernen von Separatoren. Wenn dies der Fall ist, werfen Sie einen Blick auf Apache Commons StringUtils. Es hat eine Methode namens removeEnd , die sehr elegant ist.

Beispiel:

StringUtils.removeEnd("string 1|string 2|string 3|", "|");

Ergebnis wäre: "String 1 | string 2 | string 3"

61
Mart135688
public String removeLastChar(String s) {
    if (s == null || s.length() == 0) {
        return s;
    }
    return s.substring(0, s.length()-1);
}
44
BobBobBob

Versuchen Sie nicht, das Rad neu zu erfinden, während andere Bibliotheken bereits geschrieben haben, um die String-Bearbeitung durchzuführen: org.Apache.commons.lang3.StringUtils.chop()

27
membersound

Benutze das:

 if(string.endsWith("x")) {

    string= string.substring(0, string.length() - 1);
 }
17
Navaneeth
if (str.endsWith("x")) {
  return str.substring(0, str.length() - 1);
}
return str;

Zum Beispiel ist das Wort "Bewunderer"; Nachdem ich die Methode ausgeführt habe, bekomme ich "admie". Ich möchte, dass das Wort bewundert wird.

Falls Sie versuchen, Stem englische Wörter zu verwenden

Beim Stemming handelt es sich um den Prozess, bei dem gebeugte (oder manchmal abgeleitete) Wörter auf ihre Stamm-, Basis- oder Wurzelform reduziert werden - im Allgemeinen eine geschriebene Wortform.

...

Ein Stemmer für Englisch sollte beispielsweise die Zeichenfolge "cats" (und möglicherweise "catlike", "catty" usw.) anhand der Wurzel "cat" und "stemmer", "stemming", "stemed" als identifizieren basierend auf "stamm". Ein Stemming-Algorithmus reduziert die Wörter "Angeln", "Fischfang", "Fisch" und "Fischer" auf das Wurzelwort "Fisch".

Unterschied zwischen Lucene-Stemmern: EnglishStemmer, PorterStemmer, LovinsStemmer beschreibt einige Java-Optionen.

10
Mike Samuel

Was die Lesbarkeit angeht, finde ich dies am prägnantesten

StringUtils.substring("string", 0, -1);

Die negativen Indizes können im Apache StringUtils-Dienstprogramm ..__ verwendet werden. Alle negativen Zahlen werden vom Offset des Endes des Strings an behandelt.

9
Kasturi

entfernt das letzte Vorkommen von 'xxx':

    System.out.println("aaa xxx aaa xxx ".replaceAll("xxx([^xxx]*)$", "$1"));

entfernt das letzte Vorkommen von 'xxx', wenn es das letzte Mal ist:

    System.out.println("aaa xxx aaa  ".replaceAll("xxx\\s*$", ""));

sie können das 'xxx' beliebig ersetzen, aber auf Sonderzeichen achten

Schauen Sie sich die StringBuilder-Klasse an:

    StringBuilder sb=new StringBuilder("toto,");
    System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"
3
aeocom
public String removeLastChar(String s) {
    if (!Util.isEmpty(s)) {
        s = s.substring(0, s.length()-1);
    }
    return s;
}
3

Eine Einzeilerantwort (nur eine witzige Alternative - versuchen Sie es nicht zu Hause und tolle Antworten sind bereits gegeben)

public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}
2

Warum nicht die Escape-Sequenz verwenden ...!

System.out.println(str + '\b');

Das Leben ist jetzt viel einfacher. XD! ~ Ein lesbarer Einzeiler

2
Tilak Maddy
// Remove n last characters  
// System.out.println(removeLast("Hello!!!333",3));

public String removeLast(String mes, int n) {
    return mes != null && !mes.isEmpty() && mes.length()>n
         ? mes.substring(0, mes.length()-n): mes;
}

// Leave substring before character/string  
// System.out.println(leaveBeforeChar("Hello!!!123", "1"));

public String leaveBeforeChar(String mes, String last) {
    return mes != null && !mes.isEmpty() && mes.lastIndexOf(last)!=-1
         ? mes.substring(0, mes.lastIndexOf(last)): mes;
}
 // creating StringBuilder
 StringBuilder builder = new StringBuilder(requestString);
 // removing last character from String
 builder.deleteCharAt(requestString.length() - 1);
2
Bachan Joseph

In Kotlin können Sie die dropLast () -Methode der String-Klasse verwenden. Die angegebene Nummer wird aus der Zeichenfolge entfernt.

val string1 = "Some Text"
string1.dropLast(1)
1
Mahavir Jain

Java 8

import Java.util.Optional;

public class Test
{
  public static void main(String[] args) throws InterruptedException
  {
    System.out.println(removeLastChar("test-abc"));
  }

  public static String removeLastChar(String s) {
    return Optional.ofNullable(s)
      .filter(str -> str.length() != 0)
      .map(str -> str.substring(0, str.length() - 1))
      .orElse(s);
    }
}

Ausgabe: test-ab

1
Nadhu

Die meisten Antworten hier haben Ersatzpaare vergessen.

Zum Beispiel der Charakter ???? (Codepunkt U + 1D56B) passt nicht in ein einzelnes char, daher muss es ein Ersatzpaar von zwei Zeichen bilden, um dargestellt zu werden.

Wendet man einfach die aktuell akzeptierte Antwort an (mit str.substring(0, str.length() - 1) wird das Ersatzpaar gespleißt, was zu unerwarteten Ergebnissen führt.

Man sollte auch prüfen, ob das letzte Zeichen ein Ersatzpaar ist:

public static String removeLastChar(String str) {
    Objects.requireNonNull(str, "The string should not be null");
    if (str.isEmpty()) {
        return str;
    }

    char lastChar = str.charAt(str.length() - 1);
    int cut = Character.isSurrogate(lastChar) ? 2 : 1;
    return str.substring(0, str.length() - cut);
}
1
MC Emperor

ersetzen Sie einfach die Bedingung von "if" wie folgt:

if(a.substring(a.length()-1).equals("x"))'

dies wird den Trick für Sie tun.

0

wenn Sie einen speziellen Charakter haben möchten; Verwenden Sie in json einfach String.replace (";", ""), ansonsten müssen Sie alle Zeichen in String ohne den letzten umschreiben.

0
MoadKey

Ich musste Code für ein ähnliches Problem schreiben. Eine Möglichkeit, die ich lösen konnte, verwendete eine rekursive Codierungsmethode.

static String removeChar(String Word, char charToRemove)
{
    for(int i = 0; i < Word.lenght(); i++)
    {
        if(Word.charAt(i) == charToRemove)
        {
            String newWord = Word.substring(0, i) + Word.substring(i + 1);
            return removeChar(newWord, charToRemove);
        }
    }

    return Word;
}

Der meiste Code, den ich zu diesem Thema gesehen habe, verwendet keine Rekursion. Ich hoffe, ich kann Ihnen oder jemandem helfen, der das gleiche Problem hat.

0
Jacob Mehnert

Wie man das Zeichen in der Rekursion am Ende macht:

public static String  removeChar(String Word, char charToRemove)
    {
        String char_toremove=Character.toString(charToRemove);
        for(int i = 0; i < Word.length(); i++)
        {
            if(Word.charAt(i) == charToRemove)
            {
                String newWord = Word.substring(0, i) + Word.substring(i + 1);
                return removeChar(newWord,charToRemove);
            }
        }
        System.out.println(Word);
        return Word;
    }

zum Beispiel:

removeChar ("hello world, let's go!",'l') → "heo Word, et's go!llll"
removeChar("you should not go",'o') → "yu shuld nt goooo"
0
simon francis

Wir können einen Teilstring verwenden. Hier ist das Beispiel

public class RemoveStringChar 
{
    public static void main(String[] args) 
    {   
        String strGiven = "Java";
        System.out.println("Before removing string character - " + strGiven);
        System.out.println("After removing string character - " + removeCharacter(strGiven, 3));
    }

    public static String removeCharacter(String strRemove, int position)
    {   
        return strRemove.substring(0, position) + strRemove.substring(position + 1);    
    }
}
0
Shiva

Hier ist eine Antwort, die mit Codepunkten außerhalb der Basic Multilingual Plane (Java 8+) funktioniert.

Streams verwenden:

public String method(String str) {
    return str.codePoints()
            .limit(str.codePoints().count() - 1)
            .mapToObj(i->new String(Character.toChars(i)))
            .collect(Collectors.joining());
}

Vielleicht effizienter:

public String method(String str) {
    return str.isEmpty()? "": str.substring(0, str.length() - Character.charCount(str.codePointBefore(str.length())));
}
0
Patrick Parker

Angenommen, die Gesamtlänge meiner Zeichenfolge beträgt 24. Ich möchte das letzte Zeichen nach Position 14 abschneiden, um zu beenden. Also wende ich folgende Lösung an.

String date = "2019-07-31T22:00:00.000Z";
String result = date.substring(0, date.length() - 14);
0
Avinash Khadsan
 "String name" = "String name".substring(0, ("String name".length() - 1));

Ich benutze dies in meinem Code, es ist einfach und einfach ... __ es funktioniert nur, wenn der String> 0 ist .. __ Ich habe ihn mit einer Schaltfläche verbunden und in der folgenden if - Anweisung 

if ("String name".length() > 0) {
    "String name" = "String name".substring(0, ("String name".length() - 1));
}
0
Donoso