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ć?

Calibre2010
źródło

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);
moinudin
źródło
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);
}
Ahmed Kotb
źródło
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”

Thilina Gihan Priyankara
źródło
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"
Eric Leschinski
źródło
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);
kodaddict
źródło
11
public String removeFirst(String input)
{
    return input.substring(1);
}
Reese Moore
źródło
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.

Chris Dodd
źródło
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());
}
Eli Am
źródło
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'
IntelliJ Amiya
źródło
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ż.

Mathieu Brouwers
źródło
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
YCF_L
źródło
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);
}
Andrushenko Alexander
źródło