Introducere în StringUtils

StringUtils este cea mai folosită clasă Apache Commons. Conține diverse utilități și metode care îi ajută pe dezvoltatori să evite scrierea codurilor standard sau pur și simplu greoaie pentru operațiunile de bază.

Multe dintre metodele din clasa StringUtils au echivalentele lor java.lang.String , dar, spre deosebire de metodele java.lang.String , sunt sigure pentru nul. Aceasta înseamnă că o excepție NullPointerException nu este aruncată în cel mai neașteptat moment.

Apache Commons conține o serie de metode și ne vom uita la unele dintre cele mai frecvent utilizate.

Lista metodelor StringUtils:

este gol() Verifică dacă un șir este gol
este egal() Compară șiruri
comparaţie() Compară șiruri
Index de() Găsirea unui subșir într-un șir
lastIndexOf() Găsirea unui subșir într-un șir
conține() Verifică dacă un subșir este într-un șir
conţineIgnoreCase() Verifică apariția unui subșir într-un șir, ignorând majuscule
conţineOrice() Verifică dacă un subșir apare oriunde într-un șir
containsNone() Verifică dacă un subșir apare oriunde într-un șir
conţineDoar() Verifică dacă un subșir este într-un șir
subșir () Obținerea unui subșir
Despică() Împărțirea unui șir în subșiruri
a te alatura() concatenează subșiruri
elimina() Eliminarea unui subșir
a inlocui() Înlocuiește subșirul
countMatch-uri() Numărarea numărului de meciuri

StringUtils.isEmpty() și StringUtils.isBlank()

Ambele metode sunt folosite pentru a verifica dacă un șir conține text. Ele returnează true dacă șirul este într-adevăr gol. În plus, isBlank() va returna true dacă șirul conține doar spații.

De asemenea, au propriile lor metode inverse: isNotEmpty() și isNotBlank() .

Să vedem cum puteți utiliza isEmpty() împreună cu omologul său java.lang.String.isEmpty() , precum și 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");
}

Există trei variabile de tip String aici . Unul indică null , al doilea nu este null , dar nu are conținut (un șir gol), iar al treilea nu este gol, dar va imprima un rezultat gol.

Rularea acestui cod are ca rezultat:

emptyValue is emptyValue
blankValue is blankValue
Exception in thread "main" java.lang.NullPointerException

Metoda isEmpty() încorporată în java.lang.String nu este sigură pentru nul . Veți obține cu ușurință o NullPointerException dacă încercați să verificați dacă este goală, deoarece apelați metoda pe o referință nulă . Va fi necesar să verificați în prealabil dacă referința este nulă:

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");
}

Acum rezultă:

emptyValue is emptyValue
blankValue is blankValue

Și dacă testăm aceste metodenullString:

String nullValue = null;

if(StringUtils.isEmpty(nullValue)) {
   System.out.println("nullValue is emptyValue");
}

if(StringUtils.isBlank(nullValue)) {
   System.out.println("nullValue is blankValue");
}

Atunci obținem:

nullValue is emptyValue
nullValue is blankValue

Metodele StringUtils sunt sigure pentru nul și produc rezultatul așteptat chiar dacă sunt trecute null .

StringUtils.equals()

Această metodă compară două șiruri de caractere și returnează true dacă sunt identice sau dacă ambele referințe indică null , dar rețineți că această metodă ține seama de majuscule și minuscule.

Să vedem cum funcționează:

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"));

Rezultat:

true
false
false
true
false

Pentru a compara metoda equals() din StringUtils cu 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"));

Acest lucru vă aduce înapoi la:

true
false
Exception in thread "main" java.lang.NullPointerException

Din nou, apelarea unei metode pe o referință nulă are ca rezultat o NullPointerException și va trebui să verificați dacă variabila de referință este nulă înainte de a o utiliza.

StringUtils.compare()

Declarația acestei metode arată astfel:

public static int compare(final String str1, final String str2)

Această metodă compară două șiruri de caractere lexicografic, așa cum face metoda java.lang.String.compareTo() , returnând:

  • 0 dacă str1 este egal cu str2 (sau ambele sunt nule)
  • Valoarea este mai mică decât 0 dacă str1 este mai mică decât str2
  • Valoare mai mare decât 0 dacă str1 este mai mare decât str2

Ordinea lexicografică este ordinea dicționarului. Să vedem cum putem folosi asta în programul nostru:

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"));

Primim:

0
-1
1
32
0

Notă: o valoare nulă este considerată mai mică decât o valoare nenulă . Două valori nule sunt considerate egale.

Verificarea dacă un șir conține un alt subșir

Pentru a face acest lucru, StringUtils are 5 metode:

  • conține()
  • conţineIgnoreCase()
  • conţineOrice()
  • containsNone()
  • conţineDoar()

Metoda contains() returnează adevărat sau fals , în funcție de dacă secvența de căutare este conținută într-o altă secvență sau nu.

Dacă null este transmis unei astfel de metode , va returna false . Dacă este trecut non- null , metoda va apela pur și simplu java.lang.String.indexOf(String str) pe obiectul transmis.

Exemple:

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"));

Metoda este sensibilă la majuscule și minuscule, deci ultimul apel va returna și false :

false
true
false
false

Metoda containsAny() returnează adevărat dacă șirul transmis ca prim argument conține cel puțin unul dintre subșirurile trecute în argumentele 2-N.

Exemplu:

String value = "CodeGym is cool";
System.out.println(StringUtils.containsAny(value, "cool", "c00l", "bro", "hello"));

Va afișa:

true

Această metodă este, de asemenea, sensibilă la majuscule.

metoda containsNone().

Când trebuie să verificați că un anumit șir nu conține nimic din listă, puteți utiliza metoda containsNone() . Primul parametru este un șir, iar următorii parametri sunt șiruri care nu ar trebui să fie în receptorul țintă.

Exemplu:

String s = "CodeGym is cool";
System.out.println(StringUtils.containsNone(s, 'g', 'a'));

Ieșire din consolă:

false

Lucrul cu subșiruri

Lucrul cu subșiruri este similar cu lucrul cu metodele clasei String :

substring(String str, int start)
substring (String str, int start, int end)

Aceste metode returnează un subșir din șirul str . Șirul este dat de doi indici: început și sfârșit . Și, ca de obicei în Java, ultimul caracter al intervalului este end-1 . Care este avantajul acestor metode?

Dacă treceți null unei astfel de metode , va returna pur și simplu null în loc să arunce o excepție. Aceste metode acceptă valori negative ale indicelui. În acest caz, șirul este considerat ca o buclă închisă. Ultimul caracter este urmat de primul și așa mai departe.

Să vedem cum îl putem folosi:

System.out.println(StringUtils.substring("lets java", 2, 6));
System.out.println(StringUtils.substring("lets java", -8));
System.out.println(StringUtils.substring(null, 3));

Rularea codului de mai sus ne oferă:

ts j
ets java
null

StringUtils.split()

O metodă care vă permite să împărțiți un șir în subșiruri folosind un caracter delimitator special. Dacă există unul în șirul țintă, atunci metoda va returna o matrice de subșiruri. Dacă nu există niciun caracter, va fi returnată o matrice goală. Ei bine, dacă null este transmis metodei , va returna null . Să aruncăm o privire la acest cod și cum funcționează metoda:

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("", '.')));

Rezultat:

[Address,  City,  State,  Zip,  Phone,  Email,  Password]
null
[]

StringUtils.join()

Metoda join() vă permite să concatenați o matrice de șiruri într-un singur șir. În același timp, îi poate fi trecut un caracter separator special, care va fi adăugat între subșiruri din șirul rezultat. Și dacă null este trecut la metodă , atunci va returna null .

Această metodă este exact opusul metodei split() . Să ne uităm la acest exemplu simplu:

String myData = "Address, City, State, Zip, Phone, Email, Password";

String[] myString =  StringUtils.split(myData, ',');
System.out.println(StringUtils.join(myString, '-'));

Rularea codului de mai sus ne oferă:

Address- City- State- Zip- Phone- Email- Password

StringUtils.replace()

Caută un șir într-un șir, îl găsește dacă există și înlocuiește toate aparițiile acestuia cu un șir nou.

Declarația acestei metode arată astfel:

public static String replace(final String text, final String searchString, final String replacement)

Dacă șirul de căutare nu este găsit în text, atunci nu se va întâmpla nimic și textul va rămâne același. Urmând aceeași logică, dacă textul este null , această metodă returnează null . Dacă căutați un șir nul sau înlocuiți un subșir cu null , atunci metoda va returna șirul original.

Să încercăm această metodă:

String value = "CodeGym is the best";
System.out.println(StringUtils.replace(value, "best", "cool"));

Rezultat:

CodeGym is the cool