W Javie mam ciąg:
Jamaica
Chciałbym usunąć pierwszy znak ciągu, a następnie powrócić amaica
Jak mam to zrobić?
W Javie mam ciąg:
Jamaica
Chciałbym usunąć pierwszy znak ciągu, a następnie powrócić amaica
Jak mam to zrobić?
Odpowiedzi:
Użyj substring()
funkcji z argumentem lub, 1
aby uzyskać podłańcuch z pozycji 1 ( po pierwszym znaku) do końca łańcucha (pozostawiając drugi argument domyślnie na całej długości łańcucha).
"Jamaica".substring(1);
public String removeFirstChar(String s){
return s.substring(1);
}
removeFirst()
.
Użyj substring()
i podaj liczbę znaków, które chcesz przyciąć od przodu.
String value = "Jamaica";
value = value.substring(1);
Odpowiedź: „amaica”
Użyj trójskładnikowego operatora Java, aby szybko sprawdzić, czy twoja postać tam jest, zanim ją usuniesz. Spowoduje to usunięcie znaku wiodącego tylko wtedy, gdy istnieje, jeśli zostanie przekazany pusty ciąg, zwróci pusty ciąg.
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);
Wydruki:
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("^#","");
public String removeFirst(String input)
{
return input.substring(1);
}
Kluczową rzeczą do zrozumienia w Javie jest to, że ciągi są niezmienne - nie można ich zmienić. Dlatego nie ma sensu mówić o „usuwaniu znaku z łańcucha”. Zamiast tego tworzysz NOWY ciąg zawierający tylko żądane znaki. Pozostałe posty w tym pytaniu podają różne sposoby zrobienia tego, ale ważne jest, aby zrozumieć, że nie zmieniają one oryginalnego ciągu w żaden sposób. Wszelkie odniesienia do starego ciągu będą nadal odnosić się do starego ciągu (chyba że zmienisz je tak, aby odwoływały się do innego ciągu) i nowo utworzony ciąg nie będzie na nie wpływał.
Ma to szereg implikacji dla wydajności. Za każdym razem, gdy „modyfikujesz” ciąg, tak naprawdę tworzysz nowy ciąg z domniemanym narzutem (alokacja pamięci i odśmiecanie). Więc jeśli chcesz wprowadzić serię modyfikacji łańcucha i zależy ci tylko na końcowym wyniku (łańcuchy pośrednie będą martwe, gdy tylko je `` zmodyfikujesz ''), bardziej sensowne może być użycie StringBuilder lub StringBuffer.
Metoda substring () zwraca nowy ciągznaków,który zawiera podciąg znaków obecnie zawartych w tej sekwencji.
Podciąg zaczyna się w określonym start
i rozciąga się w postać index end - 1
.
Ma dwie formy. Pierwszy to
String substring(int FirstIndex)
Tutaj FirstIndex określa indeks, od którego rozpocznie się podciąg. Ta forma zwraca kopię podłańcucha, który zaczyna się od FirstIndex i biegnie na końcu ciągu wywołującego.
String substring(int FirstIndex, int endIndex)
Tutaj FirstIndex określa indeks początkowy, a endIndex określa punkt zatrzymania. Zwrócony ciąg zawiera wszystkie znaki z indeksu początkowego, aż do indeksu końcowego.
String str="Amiyo";
// prints substring from index 3
System.out.println("substring is = " + str.substring(3)); // Output "yo'
Natknąłem się na sytuację, w której musiałem usunąć nie tylko pierwszy znak (jeśli był to #
, ale pierwszy zestaw znaków).
String myString = ###Hello World
może być punktem wyjścia, ale chciałbym tylko zachować Hello World
. można to zrobić w następujący sposób.
while (myString.charAt(0) == '#') { // Remove all the # chars in front of the real string
myString = myString.substring(1, myString.length());
}
Dla przypadku OP, wymienić while
się if
i działa również.
Innym rozwiązaniem jest rozwiązanie problemu za replaceAll
pomocą wyrażenia regularnego ^.{1}
( demo wyrażenia regularnego ), na przykład:
String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica
Moja wersja usuwania wiodących znaków, jednego lub wielu. Na przykład ciąg str1 = „01234”, podczas usuwania wiodącego „0”, wynikiem będzie „1234”. Dla ciągu str2 = „000123” wynikiem będzie ponownie „123”. Dla parametru str3 = „000” wynikiem będzie pusty ciąg: „”. Taka funkcjonalność jest często przydatna podczas konwersji ciągów liczbowych na liczby. Zaletą tego rozwiązania w porównaniu z wyrażeniem regularnym (replaceAll (...)) jest to, że jest ono znacznie szybsze. Jest to ważne przy przetwarzaniu dużej liczby ciągów.
public static String removeLeadingChar(String str, char ch) {
int idx = 0;
while ((idx < str.length()) && (str.charAt(idx) == ch))
idx++;
return str.substring(idx);
}