Jak usunąć ostatni znak ciągu?

1. Przegląd

W tym krótkim artykule sprawdzimy i omówimy różne techniki usuwania ostatniego znaku String.

2. Używanie String.substring ()

Najprostszym sposobem jest użycie wbudowanego w podciąg () metody z String klasy.

Aby usunąć ostatni znak z danego Stringa, musimy użyć dwóch parametrów: 0 jako indeksu początkowego oraz indeksu przedostatniego znaku. Możemy to osiągnąć poprzez wywołanie String „s length () metody i odjęcie 1 od wyniku.

Jednak ta metoda nie jest bezpieczna dla wartości null i jeśli użyjemy pustego ciągu, zakończy się to niepowodzeniem.

Aby przezwyciężyć problemy z ciągami o wartości null i pustymi, możemy opakować metodę w klasę pomocniczą:

public static String removeLastChar(String s) 

Możemy refaktoryzować kod i używać Javy 8:

public static String removeLastCharOptional(String s) { return Optional.ofNullable(s) .filter(str -> str.length() != 0) .map(str -> str.substring(0, str.length() - 1)) .orElse(s); }

3. Korzystanie z metody StringUtils.substring ()

Zamiast wymyślać koło, możemy użyć StringUtils klasę z Apache Commons Lang3 bibliotece, która oferuje jako String operacje. Jedną z nich jest metoda substring () bezpieczna dla wartości null , która obsługuje wyjątki.

Aby dołączyć StringUtils, musimy zaktualizować nasz plik pom.xml :

 org.apache.commons commons-lang3 3.0 

StringUtils.substring () wymaga trzech parametrów: danego String, indeksu pierwszego znaku (w naszym przypadku zawsze będzie to 0) oraz indeksu przedostatniego znaku. Ponownie możemy po prostu użyć metody length () i odjąć 1:

String TEST_STRING = "abcdef"; StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1);

Jednak ta operacja nie jest ponownie zerowa bezpieczna. Jednak będzie działać z pustymi ciągami znaków.

4. Używanie StringUtils.chop ()

Klasa StringUtils udostępnia metodę chop () , która działa dobrze ze wszystkimi scenariuszami brzegowymi: pustymi i pustymi ciągami .

Jest bardzo łatwy w użyciu i wymaga tylko jednego parametru: ciągu znaków. Jego jedynym celem jest usunięcie ostatniego znaku. Nic dodać nic ująć:

StringUtils.chop(TEST_STRING);

5. Używanie wyrażeń regularnych

Możemy również usunąć ostatni znak (lub dowolną liczbę znaków) od String przez właściwe wykorzystanie wyrażeń regularnych.

Na przykład możemy skorzystać z metody replaceAll () samej klasy String - która przyjmuje dwa parametry: wyrażenie regularne i zastępczy String :

TEST_STRING.replaceAll(".$", "");

Zwróć uwagę, że ponieważ wywołujemy metodę na łańcuchu - operacja oczywiście nie jest bezpieczna dla wartości null .

Ponadto replaceAll () i wyrażenie regex mogą być na pierwszy rzut oka złożone. Możesz przeczytać więcej o wyrażeniach regularnych tutaj, ale aby uczynić logikę nieco bardziej przyjazną dla użytkownika, możemy opakować ją w klasę pomocniczą:

public static String removeLastCharRegex(String s) { return (s == null) ? null : s.replaceAll(".$", ""); }

Zauważ, że jeśli ciąg kończy się znakiem nowej linii, powyższa metoda zakończy się niepowodzeniem jako „.” w wyrażeniu regularnym dopasowuje dowolny znak z wyjątkiem terminatorów linii.

Na koniec napiszmy ponownie implementację w Javie 8 :

public static String removeLastCharRegexOptional(String s) { return Optional.ofNullable(s) .map(str -> str.replaceAll(".$", "")) .orElse(s); }

6. Wniosek

W tym krótkim artykule, omówiliśmy różne sposoby usuwania tylko ostatni charakter String - ręcznej, jakiś gotowy po wyjęciu z pudełka.

A jeśli potrzebujemy większej elastyczności i musimy usunąć więcej znaków, możemy skorzystać z bardziej zaawansowanego rozwiązania z wyrażeniami regularnymi.

Jak zawsze kod użyty w artykule można znaleźć na GitHub.