In Java, ho una stringa:
Jamaica
Vorrei rimuovere il primo carattere della stringa e quindi tornare amaica
Come lo farei?
In Java, ho una stringa:
Jamaica
Vorrei rimuovere il primo carattere della stringa e quindi tornare amaica
Come lo farei?
Risposte:
Utilizzare la substring()
funzione con un argomento di 1
per 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);
public String removeFirstChar(String s){
return s.substring(1);
}
removeFirst()
.
Utilizzare substring()
e indicare il numero di caratteri che si desidera tagliare dalla parte anteriore.
String value = "Jamaica";
value = value.substring(1);
Risposta: "amaica"
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
String a = "Cool";
a = a.replace("o","");
//variable 'a' contains the string "Cl"
String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"
header = header.substring(header.startsWith("#") ? 1 : 0);
header = header.replaceFirst("^#","");
È possibile utilizzare il metodo di sottostringa della String
classe 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);
public String removeFirst(String input)
{
return input.substring(1);
}
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.
substring () metodo restituisce una nuova stringa che contiene una sottosequenza di caratteri attualmente contenute in questa sequenza.
Il sottostringa inizia nel punto specificatostart
e si estende al carattere inindex end - 1
.
Ha due forme. Il primo è
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.
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.
String str="Amiyo";
// prints substring from index 3
System.out.println("substring is = " + str.substring(3)); // Output "yo'
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 World
potrebbe 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 while
con if
e funziona pure.
Un'altra soluzione, è possibile risolvere il problema utilizzando replaceAll
ad esempio un po 'di regex ^.{1}
( regex demo ):
String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica
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);
}