Java: rimuove il primo carattere di una stringa


215

In Java, ho una stringa:

Jamaica

Vorrei rimuovere il primo carattere della stringa e quindi tornare amaica

Come lo farei?

Risposte:


343

Utilizzare la substring()funzione con un argomento di 1per ottenere la sottostringa dalla posizione 1 ( dopo il primo carattere) alla fine della stringa (lasciando fuori il secondo argomento per impostazione predefinita per l'intera lunghezza della stringa).

"Jamaica".substring(1);

21
È importante notare che questo non rimuove effettivamente il carattere dalla stringa: ti dà una nuova stringa che ha tutti i caratteri della vecchia stringa tranne la prima. Non c'è modo di modificare effettivamente una stringa.
Chris Dodd,

Il link sembra non essere più valido. Prova invece il seguente link: substring (int)
Christian Hoffmann,

1
Sì, se si desidera rimuovere i primi n caratteri di una variabile stringa, procedere come segue: variabile = variabile.substring (n);
Mitulát báti

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

12
Se hai intenzione di definire una nuova funzione, almeno scegli un nome adatto come removeFirst().
Moinudin,

55

Utilizzare substring()e indicare il numero di caratteri che si desidera tagliare dalla parte anteriore.

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

Risposta: "amaica"


47

In Java, rimuovi il personaggio principale solo se si tratta di un determinato personaggio

Utilizzare l'operatore ternario Java per verificare rapidamente se il personaggio è lì prima di rimuoverlo. In questo modo il carattere principale viene rimosso solo se esiste, se viene passata una stringa vuota, restituisce la stringa vuota.

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

stampe:

blankstring
foobar
moobar

Java, rimuovi tutte le istanze di un carattere in qualsiasi punto di una stringa:

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

Java, rimuovi la prima istanza di un carattere in qualsiasi punto di una stringa:

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

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

3
O con regex:header = header.replaceFirst("^#","");
Aaron Blenkush,

18

È possibile utilizzare il metodo di sottostringa della Stringclasse che accetta solo l'indice iniziale e restituisce la sottostringa che inizia con il carattere nell'indice specificato e si estende fino alla fine della stringa.

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

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

11

La cosa chiave da capire in Java è che le stringhe sono immutabili - non puoi cambiarle. Quindi non ha senso parlare di "rimuovere un personaggio da una stringa". Invece, crei una NUOVA stringa con solo i caratteri che desideri. Gli altri post in questa domanda ti offrono una varietà di modi per farlo, ma è importante capire che questi non cambiano la stringa originale in alcun modo. Tutti i riferimenti che hai alla vecchia stringa continueranno a fare riferimento alla vecchia stringa (a meno che non le modifichi per fare riferimento a una stringa diversa) e non saranno interessati dalla stringa appena creata.

Ciò ha una serie di implicazioni per le prestazioni. Ogni volta che si "modifica" una stringa, in realtà si crea una nuova stringa con tutte le spese generali implicite (allocazione della memoria e garbage collection). Quindi, se vuoi apportare una serie di modifiche a una stringa e preoccuparti solo del risultato finale (le stringhe intermedie saranno morte non appena le "modifichi"), potrebbe avere più senso usare invece StringBuilder o StringBuffer.


9

puoi fare così:

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

o in generale:

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

8

substring () metodo restituisce una nuova stringa che contiene una sottosequenza di caratteri attualmente contenute in questa sequenza.

Il sottostringa inizia nel punto specificatostarte si estende al carattere inindex end - 1.

Ha due forme. Il primo è

  1. String substring(int FirstIndex)

Qui, FirstIndex specifica l'indice da cui inizierà la sottostringa. Questo modulo restituisce una copia della sottostringa che inizia in FirstIndex e viene eseguita fino alla fine della stringa che richiama.

  1. String substring(int FirstIndex, int endIndex)

Qui, FirstIndex specifica l'indice iniziale e endIndex specifica il punto di arresto. La stringa restituita contiene tutti i caratteri dall'indice iniziale, fino a, ma non incluso, l'indice finale.

Esempio

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

4

Mi sono imbattuto in una situazione in cui ho dovuto rimuovere non solo il primo personaggio (se fosse un #, ma il primo set di personaggi.

String myString = ###Hello Worldpotrebbe essere il punto di partenza, ma vorrei solo mantenere il Hello World. questo potrebbe essere fatto come segue.

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

Nel caso di OP, sostituire whilecon ife funziona pure.


1
Ci sarà un problema se myString == "#" perché la stringa sarà fuori dai limiti ad un certo punto. Per evitarlo, potresti fare (! MyString.isEmpty () && myString.charAt (0))
Christian,

2

Un'altra soluzione, è possibile risolvere il problema utilizzando replaceAllad esempio un po 'di regex ^.{1}( regex demo ):

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

1

La mia versione di rimozione dei caratteri principali, uno o più. Ad esempio, String str1 = "01234", quando si rimuove lo "0" iniziale, il risultato sarà "1234". Per una stringa str2 = "000123" il risultato sarà di nuovo "123". E per String str3 = "000" il risultato sarà stringa vuota: "". Tale funzionalità è spesso utile quando si convertono le stringhe numeriche in numeri. Il vantaggio di questa soluzione rispetto a regex (sostituire All (...)) è che questa è molto più veloce. Questo è importante quando si elabora un numero elevato di stringhe.

 public static String removeLeadingChar(String str, char ch) {
    int idx = 0;
    while ((idx < str.length()) && (str.charAt(idx) == ch))
        idx++;
    return str.substring(idx);
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.