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?

Calibre2010
quelle

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);
Moinudin
quelle
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);
}
Ahmed Kotb
quelle
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"

Thilina Gihan Priyankara
quelle
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"
Eric Leschinski
quelle
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);
Codaddict
quelle
11
public String removeFirst(String input)
{
    return input.substring(1);
}
Reese Moore
quelle
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.

Chris Dodd
quelle
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());
}
eli am
quelle
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'
IntelliJ Amiya
quelle
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.

Mathieu Brouwers
quelle
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
YCF_L
quelle
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);
}
Andrushenko Alexander
quelle