Java - usuwanie pierwszego znaku ciągu


215

W Javie mam ciąg:

Jamaica

Chciałbym usunąć pierwszy znak ciągu, a następnie powrócić amaica

Jak mam to zrobić?

Odpowiedzi:


341

Użyj substring()funkcji z argumentem lub, 1aby 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);

21
Ważne jest, aby pamiętać, że to tak naprawdę nie usuwa znaku z łańcucha - daje nowy łańcuch, który ma wszystkie znaki starego łańcucha, z wyjątkiem pierwszego. Nie ma możliwości zmodyfikowania łańcucha.
Chris Dodd

Link wydaje się już nieważny. Zamiast tego spróbuj użyć następującego linku: substring (int)
Christian Hoffmann

1
Tak, jeśli chcesz usunąć pierwsze n znaków zmiennej łańcuchowej, wykonaj następujące czynności: zmienna = zmienna.substring (n);
Mitulát báti

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

12
Jeśli zamierzasz zdefiniować nową funkcję, przynajmniej wybierz odpowiednią nazwę, taką jak removeFirst().
moinudin

55

Użyj substring()i podaj liczbę znaków, które chcesz przyciąć od przodu.

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

Odpowiedź: „amaica”


47

W Javie usuń wiodący znak tylko wtedy, gdy jest to określony znak

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

Java, usuń wszystkie wystąpienia znaku w dowolnym miejscu ciągu:

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

Java, usuń pierwsze wystąpienie znaku w dowolnym miejscu ciągu:

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

4
header = header.substring(header.startsWith("#") ? 1 : 0);
SUSZENIE

3
Lub z wyrażeniem regularnym:header = header.replaceFirst("^#","");
Aaron Blenkush,

18

Można użyć metody podciągówString klasy, która pobiera tylko indeks początkowy i zwraca podłańcuch rozpoczynający się od znaku o określonym indeksie i rozciągający się na koniec łańcucha.

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


11

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.


9

możesz zrobić tak:

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

lub ogólnie:

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

8

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 starti rozciąga się w postać index end - 1.

Ma dwie formy. Pierwszy to

  1. 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.

  1. 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.

Przykład

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

4

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 Worldmoż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ć whilesię ifi działa również.


1
Wystąpi problem, jeśli myString == "#", ponieważ w pewnym momencie Łańcuch będzie poza zakresem. Aby temu zapobiec, możesz zrobić (! MyString.isEmpty () && myString.charAt (0))
Christian

2

Innym rozwiązaniem jest rozwiązanie problemu za replaceAllpomocą wyrażenia regularnego ^.{1}( demo wyrażenia regularnego ), na przykład:

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

1

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);
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.