Java - Entfernen des ersten Zeichens einer Zeichenfolge


215

In Java habe ich einen String:

Jamaica

Ich möchte das erste Zeichen der Zeichenfolge entfernen und dann zurückkehren amaica

Wie würde ich das machen?

Antworten:


341

Verwenden Sie die substring()Funktion mit dem Argument von 1, um die Teilzeichenfolge von Position 1 ( nach dem ersten Zeichen) bis zum Ende der Zeichenfolge zu bringen (wobei das zweite Argument standardmäßig die gesamte Länge der Zeichenfolge verwendet).

"Jamaica".substring(1);

21
Es ist wichtig zu beachten , dass dies tatsächlich nicht entfernt das Zeichen aus der Zeichenfolge - es Ihnen eine neue Zeichenfolge gibt, der alle Zeichen der alten Zeichenfolge mit Ausnahme des ersten hat. Es gibt keine Möglichkeit, eine Zeichenfolge tatsächlich zu ändern.
Chris Dodd

Der Link scheint nicht mehr gültig zu sein. Versuchen Sie stattdessen den folgenden Link: Teilzeichenfolge (int)
Christian Hoffmann

1
Ja, wenn Sie die ersten n Zeichen einer Zeichenfolgenvariablen entfernen möchten, gehen Sie folgendermaßen vor: variable = variable.substring (n);
Mitulát báti

67
public String removeFirstChar(String s){
   return s.substring(1);
}

12
Wenn Sie eine neue Funktion definieren möchten, wählen Sie mindestens einen geeigneten Namen wie removeFirst().
Moinudin

55

Verwenden Sie substring()und geben Sie die Anzahl der Zeichen an, die Sie von vorne zuschneiden möchten.

String value = "Jamaica";
value = value.substring(1);

Antwort: "amaica"


47

Entfernen Sie in Java nur führende Zeichen, wenn es sich um ein bestimmtes Zeichen handelt

Verwenden Sie den ternären Java-Operator, um schnell zu überprüfen, ob Ihr Charakter vorhanden ist, bevor Sie ihn entfernen. Dadurch wird das führende Zeichen nur entfernt, wenn es vorhanden ist. Wenn eine leere Zeichenfolge übergeben wird, wird eine leere Zeichenfolge zurückgegeben.

String header = "";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

header = "foobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

header = "#moobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

Drucke:

blankstring
foobar
moobar

Java, entfernen Sie alle Instanzen eines Zeichens an einer beliebigen Stelle in einer Zeichenfolge:

String a = "Cool";
a = a.replace("o","");
//variable 'a' contains the string "Cl"

Java, entfernen Sie die erste Instanz eines Zeichens an einer beliebigen Stelle in einer Zeichenfolge:

String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"

4
DRY:header = header.substring(header.startsWith("#") ? 1 : 0);
Aaron Blenkush

3
Oder mit Regex:header = header.replaceFirst("^#","");
Aaron Blenkush

18

Sie können die Teilzeichenfolgenmethode der StringKlasse verwenden, die nur den Anfangsindex verwendet und die Teilzeichenfolge zurückgibt, die mit dem Zeichen am angegebenen Index beginnt und sich bis zum Ende der Zeichenfolge erstreckt.

String str = "Jamaica";
str = str.substring(1);

11
public String removeFirst(String input)
{
    return input.substring(1);
}

11

Das Wichtigste in Java ist, dass Strings unveränderlich sind - Sie können sie nicht ändern. Es macht also keinen Sinn, von "Entfernen eines Zeichens aus einer Zeichenfolge" zu sprechen. Stattdessen erstellen Sie eine NEUE Zeichenfolge mit nur den gewünschten Zeichen. Die anderen Beiträge in dieser Frage bieten Ihnen verschiedene Möglichkeiten, dies zu tun. Es ist jedoch wichtig zu verstehen, dass diese die ursprüngliche Zeichenfolge in keiner Weise ändern. Alle Verweise, die Sie auf die alte Zeichenfolge haben, beziehen sich weiterhin auf die alte Zeichenfolge (es sei denn, Sie ändern sie so, dass sie auf eine andere Zeichenfolge verweisen) und werden von der neu erstellten Zeichenfolge nicht beeinflusst.

Dies hat eine Reihe von Auswirkungen auf die Leistung. Jedes Mal, wenn Sie eine Zeichenfolge "ändern", erstellen Sie tatsächlich eine neue Zeichenfolge mit dem gesamten implizierten Overhead (Speicherzuweisung und Speicherbereinigung). Wenn Sie also eine Reihe von Änderungen an einer Zeichenfolge vornehmen möchten und sich nur um das Endergebnis kümmern möchten (die Zwischenzeichenfolgen sind tot, sobald Sie sie "ändern"), ist es möglicherweise sinnvoller, stattdessen einen StringBuilder oder StringBuffer zu verwenden.


9

Sie können dies tun:

String str="Jamaica";
str=str.substring(1, title.length());
return str;

oder allgemein:

public String removeFirstChar(String str){
   return str.substring(1, title.length());
}

8

Die Methode substring () gibt einen neuen String zurück, der eine Teilsequenz von Zeichenenthält,die derzeit in dieser Sequenz enthalten sind.

Die Teilzeichenfolge beginnt bei der angegebenen startund erstreckt sich bis zum Zeichen bei index end - 1.

Es hat zwei Formen. Das erste ist

  1. String substring(int FirstIndex)

Hier gibt FirstIndex den Index an, an dem die Teilzeichenfolge beginnt. Dieses Formular gibt eine Kopie der Teilzeichenfolge zurück, die bei FirstIndex beginnt und bis zum Ende der aufrufenden Zeichenfolge ausgeführt wird.

  1. String substring(int FirstIndex, int endIndex)

Hier gibt FirstIndex den Anfangsindex und endIndex den Haltepunkt an. Die zurückgegebene Zeichenfolge enthält alle Zeichen vom Anfangsindex bis zum Endindex, jedoch ohne diesen.

Beispiel

    String str="Amiyo";
   // prints substring from index 3
   System.out.println("substring is = " + str.substring(3)); // Output "yo'

4

Ich stieß auf eine Situation, in der ich nicht nur das erste Zeichen (wenn es ein war #, sondern den ersten Zeichensatz) entfernen musste .

String myString = ###Hello Worldkönnte der Ausgangspunkt sein, aber ich würde nur das behalten wollen Hello World. Dies könnte wie folgt erfolgen.

while (myString.charAt(0) == '#') { // Remove all the # chars in front of the real string
    myString = myString.substring(1, myString.length());
}

Bei OP ersetzen Sie es whiledurch ifund es funktioniert auch.


1
Es wird ein Problem geben, wenn myString == "#" ist, da der String irgendwann außerhalb der Grenzen liegt. Um dies zu verhindern, könnten Sie (! MyString.isEmpty () && myString.charAt (0))
Christian

2

Eine andere Lösung, Sie können Ihr Problem replaceAllmit einem regulären Ausdruck ^.{1}( Regex-Demo ) lösen, zum Beispiel:

String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica

1

Meine Version zum Entfernen führender Zeichen, eines oder mehrerer. Beispiel: String str1 = "01234". Wenn Sie die führende '0' entfernen, lautet das Ergebnis "1234". Für einen String str2 = "000123" ist das Ergebnis wieder "123". Und für String str3 = "000" ist das Ergebnis ein leerer String: "". Diese Funktionalität ist häufig nützlich, wenn numerische Zeichenfolgen in Zahlen konvertiert werden. Der Vorteil dieser Lösung gegenüber Regex (replaceAll (...)) besteht darin, dass diese viel schneller ist. Dies ist wichtig, wenn Sie eine große Anzahl von Zeichenfolgen verarbeiten.

 public static String removeLeadingChar(String str, char ch) {
    int idx = 0;
    while ((idx < str.length()) && (str.charAt(idx) == ch))
        idx++;
    return str.substring(idx);
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.