Wprowadzenie do StringUtils
StringUtils to najczęściej używana klasa Apache Commons. Zawiera różne narzędzia i metody, które pomagają programistom uniknąć pisania szablonów lub po prostu nieporęcznego kodu do podstawowych operacji.
Wiele metod w klasie StringUtils ma odpowiedniki java.lang.String , ale w przeciwieństwie do metod java.lang.String są bezpieczne dla wartości null. Oznacza to, że wyjątek NullPointerException nie jest zgłaszany w najbardziej nieoczekiwanym momencie.
Apache Commons zawiera wiele metod, a my przyjrzymy się niektórym z najczęściej używanych.
Lista metod StringUtils:
jest pusty() | Sprawdza, czy łańcuch jest pusty |
równa się() | Porównuje łańcuchy |
porównywać() | Porównuje łańcuchy |
indeks() | Znajdowanie podłańcucha w ciągu |
lastIndexOf() | Znajdowanie podłańcucha w ciągu |
zawiera() | Sprawdza, czy podłańcuch znajduje się w łańcuchu |
zawieraIgnoreCase() | Sprawdza występowanie podłańcucha w łańcuchu, ignorując wielkość liter |
zawieraDowolny() | Sprawdza, czy podłańcuch występuje w dowolnym miejscu ciągu |
zawiera Brak() | Sprawdza, czy podłańcuch występuje w dowolnym miejscu ciągu |
zawieraTylko() | Sprawdza, czy podłańcuch znajduje się w łańcuchu |
podłańcuch() | Pobieranie podciągu |
podział() | Podział łańcucha na podciągi |
dołączyć() | łączyć podciągi |
usunąć() | Usuwanie podciągu |
zastępować() | Zastąp podciąg |
countMatches() | Liczenie liczby dopasowań |
StringUtils.isEmpty() i StringUtils.isBlank()
Obie metody służą do sprawdzania, czy łańcuch zawiera jakikolwiek tekst. Zwracają wartość true, jeśli łańcuch jest naprawdę pusty. Dodatkowo funkcja isBlank() zwróci również wartość true , jeśli łańcuch zawiera tylko spacje.
Mają też własne metody odwrotne: isNotEmpty() i isNotBlank() .
Zobaczmy, jak możesz użyć funkcji isEmpty() wraz z jej odpowiednikiem java.lang.String.isEmpty() , a także funkcji isBlank() :
String nullValue = null;
String emptyValue = "";
String blankValue = "\n \t \n";
if(StringUtils.isEmpty(emptyValue)) {
System.out.println("emptyValue is emptyValue");
}
if(StringUtils.isBlank(blankValue)) {
System.out.println("blankValue is blankValue");
}
if(!nullValue.isEmpty()) {
System.out.println("nullString isn't null");
}
Istnieją tutaj trzy zmienne typu String . Jeden wskazuje na null , drugi nie jest pusty , ale nie ma treści (pusty ciąg znaków), a trzeci nie jest pusty, ale wypisze pusty wynik.
Uruchomienie tego kodu powoduje:
emptyValue is emptyValue
blankValue is blankValue
Exception in thread "main" java.lang.NullPointerException
Metoda isEmpty() wbudowana w java.lang.String nie jest bezpieczna dla wartości null . Łatwo otrzymasz wyjątek NullPointerException, jeśli spróbujesz sprawdzić, czy jest pusty, ponieważ wywołujesz metodę na odwołaniu o wartości null . Konieczne będzie wcześniejsze sprawdzenie, czy referencja jest pusta:
String nullValue = null;
String emptyValue = "";
String blankValue = "\n \t \n";
if(StringUtils.isEmpty(emptyValue)) {
System.out.println("emptyValue is emptyValue");
}
if(StringUtils.isBlank(blankValue)) {
System.out.println("blankValue is blankValue");
}
if(nullValue != null && !nullValue.isEmpty()) {
System.out.println("nullString isn't null");
}
Teraz skutkuje to:
emptyValue is emptyValue
blankValue is blankValue
A jeśli przetestujemy te metody nanullString:
String nullValue = null;
if(StringUtils.isEmpty(nullValue)) {
System.out.println("nullValue is emptyValue");
}
if(StringUtils.isBlank(nullValue)) {
System.out.println("nullValue is blankValue");
}
Następnie otrzymujemy:
nullValue is emptyValue
nullValue is blankValue
Metody StringUtils są null bezpieczne i dają oczekiwany wynik, nawet jeśli zostaną przekazane null .
StringUtils.equals()
Ta metoda porównuje dwa łańcuchy i zwraca wartość true , jeśli są one identyczne lub jeśli oba odniesienia wskazują na null , ale należy pamiętać, że w tej metodzie rozróżniana jest wielkość liter.
Zobaczmy, jak to działa:
System.out.println(StringUtils.equals(null, null));
System.out.println(StringUtils.equals(null, "some information"));
System.out.println(StringUtils.equals("some information", null));
System.out.println(StringUtils.equals("some information", "some information"));
System.out.println(StringUtils.equals("some additional information", "some information"));
Wynik:
true
false
false
true
false
Aby porównać metodę equals() z StringUtils z java.lang.String.equals() :
String nullValue = null;
System.out.println(StringUtils.equals(nullValue, null));
System.out.println(StringUtils.equals(nullValue, "some information"));
System.out.println(nullValue.equals(null));
System.out.println(nullValue.equals("some information"));
Spowoduje to powrót do:
true
false
Exception in thread "main" java.lang.NullPointerException
Ponownie wywołanie metody na odwołaniu o wartości null skutkuje wyjątkiem NullPointerException i przed użyciem należy sprawdzić, czy zmienna odniesienia ma wartość null .
StringUtils.compare()
Deklaracja tej metody wygląda następująco:
public static int compare(final String str1, final String str2)
Ta metoda porównuje leksykograficznie dwa ciągi, tak jak robi to metoda java.lang.String.compareTo() , zwracając:
- 0 jeśli str1 jest równe str2 (lub oba są puste)
- Wartość jest mniejsza niż 0, jeśli str1 jest mniejsze niż str2
- Wartość większa niż 0, jeśli str1 jest większe niż str2
Porządek leksykograficzny jest porządkiem słownikowym. Zobaczmy, jak możemy to wykorzystać w naszym programie:
System.out.println(StringUtils.compare(null, null));
System.out.println(StringUtils.compare(null , "codeGym"));
System.out.println(StringUtils.compare("codeGym", null));
System.out.println(StringUtils.compare("codeGym", "CODEGYM"));
System.out.println(StringUtils.compare("codeGym", "codeGym"));
Otrzymujemy:
0
-1
1
32
0
Uwaga: wartość null jest uważana za mniejszą niż wartość inna niż null . Dwie wartości null są uważane za równe.
Sprawdzanie, czy łańcuch zawiera inny podciąg
Aby to zrobić, StringUtils ma 5 metod:
- zawiera()
- zawieraIgnoreCase()
- zawieraDowolny()
- zawiera Brak()
- zawieraTylko()
Metoda zawiera() zwraca wartość true lub false w zależności od tego, czy wyszukiwana sekwencja jest zawarta w innej sekwencji, czy nie.
Jeśli do takiej metody zostanie przekazana wartość null , zwróci ona wartość false . Jeśli zostanie przekazana wartość różna od null , metoda po prostu wywoła java.lang.String.indexOf(String str) na przekazanym obiekcie.
Przykłady:
String value = "CodeGym is cool";
System.out.println(StringUtils.contains(null, "a"));
System.out.println(StringUtils.contains(value, "CodeGym"));
System.out.println(StringUtils.contains(value, "C++"));
System.out.println(StringUtils.contains(value, "codegym"));
W metodzie rozróżniana jest wielkość liter, więc ostatnie wywołanie również zwróci false :
false
true
false
false
Metoda zawieraAny() zwraca wartość true , jeśli łańcuch przekazany jako pierwszy argument zawiera co najmniej jeden z podłańcuchów przekazanych w argumentach 2-N.
Przykład:
String value = "CodeGym is cool";
System.out.println(StringUtils.containsAny(value, "cool", "c00l", "bro", "hello"));
Wyświetli się:
true
Ta metoda uwzględnia również wielkość liter.
zawiera metodę None().
Gdy chcesz sprawdzić, czy określony ciąg znaków nie zawiera niczego z listy, możesz użyć metody availableNone() . Pierwszy parametr to ciąg, a następujące parametry to ciągi, które nie powinny znajdować się w docelowym ujściu.
Przykład:
String s = "CodeGym is cool";
System.out.println(StringUtils.containsNone(s, 'g', 'a'));
Wyjście konsoli:
false
Praca z podciągami
Praca z podłańcuchami jest podobna do pracy z metodami klasy String :
substring(String str, int start)
substring (String str, int start, int end)
Te metody zwracają podłańcuch z ciągu str . Łańcuch jest określony przez dwa indeksy: start i end . I jak zwykle w Javie, ostatnim znakiem zakresu jest end-1 . Jaka jest zaleta tych metod?
Jeśli przekażesz null takiej metodzie , po prostu zwróci ona wartość null zamiast zgłaszać wyjątek. Te metody obsługują ujemne wartości indeksu. W tym przypadku łańcuch jest traktowany jako zamknięta pętla. Po ostatnim znaku następuje pierwszy i tak dalej.
Zobaczmy, jak możemy to wykorzystać:
System.out.println(StringUtils.substring("lets java", 2, 6));
System.out.println(StringUtils.substring("lets java", -8));
System.out.println(StringUtils.substring(null, 3));
Uruchomienie powyższego kodu daje nam:
ts j
ets java
null
StringUtils.split()
Metoda umożliwiająca podzielenie łańcucha na podciągi za pomocą specjalnego znaku ogranicznika. Jeśli w ciągu docelowym jest jeden, metoda zwróci tablicę podciągów. Jeśli nie ma znaku, zwrócona zostanie pusta tablica. Cóż, jeśli null zostanie przekazane do metody , zwróci ona wartość null . Rzućmy okiem na ten kod i sposób działania metody:
String myData = "Address, City, State, Zip, Phone, Email, Password";
System.out.println(Arrays.toString(StringUtils.split(myData, ',')));
System.out.println(Arrays.toString(StringUtils.split(null, '.')));
System.out.println(Arrays.toString(StringUtils.split("", '.')));
Wynik:
[Address, City, State, Zip, Phone, Email, Password]
null
[]
StringUtils.join()
Metoda join() umożliwia połączenie tablicy łańcuchów w jeden ciąg. Jednocześnie można do niego przekazać specjalny znak separatora, który zostanie dodany pomiędzy podłańcuchami w wynikowym ciągu. A jeśli do metody zostanie przekazana wartość null , zwróci ona wartość null .
Ta metoda jest dokładnym przeciwieństwem metody split() . Spójrzmy na ten prosty przykład:
String myData = "Address, City, State, Zip, Phone, Email, Password";
String[] myString = StringUtils.split(myData, ',');
System.out.println(StringUtils.join(myString, '-'));
Uruchomienie powyższego kodu daje nam:
Address- City- State- Zip- Phone- Email- Password
StringUtils.replace()
Wyszukuje ciąg w ciągu, znajduje go, jeśli istnieje, i zastępuje wszystkie jego wystąpienia nowym ciągiem.
Deklaracja tej metody wygląda następująco:
public static String replace(final String text, final String searchString, final String replacement)
Jeśli wyszukiwany ciąg nie zostanie znaleziony w tekście, nic się nie stanie, a tekst pozostanie taki sam. Zgodnie z tą samą logiką, jeśli tekst jest null , ta metoda zwraca null . Jeśli szukasz łańcucha zerowego lub zastępujesz podłańcuch przez null , metoda zwróci oryginalny ciąg.
Spróbujmy tej metody:
String value = "CodeGym is the best";
System.out.println(StringUtils.replace(value, "best", "cool"));
Wynik:
CodeGym is the cool
GO TO FULL VERSION