A StringUtils bemutatása

A StringUtils a leggyakrabban használt Apache Commons osztály. Különböző segédprogramokat és módszereket tartalmaz, amelyek segítenek a fejlesztőknek elkerülni, hogy alapműveletekhez ne írjanak sablonokat vagy egyszerűen nehézkes kódokat.

A StringUtils osztály számos metódusának van java.lang.String megfelelője , de a java.lang.String metódusokkal ellentétben null-biztonságosak. Ez azt jelenti, hogy a NullPointerException nem a legváratlanabb pillanatban jelenik meg .

Az Apache Commons számos módszert tartalmaz, és a leggyakrabban használt módszereket tekintjük át.

A StringUtils metódusok listája:

üres() Ellenőrzi, hogy egy karakterlánc üres-e
egyenlő () Összehasonlítja a karakterláncokat
összehasonlítani () Összehasonlítja a karakterláncokat
indexe() Alkarakterlánc keresése egy karakterláncban
lastIndexOf() Alkarakterlánc keresése egy karakterláncban
tartalmazza () Ellenőrzi, hogy egy részkarakterlánc szerepel-e egy karakterláncban
tartalmazza IgnoreCase() Ellenőrzi, hogy egy karakterláncban előfordul-e egy részkarakterlánc, figyelmen kívül hagyva a kis- és nagybetűket
tartalmazAny() Ellenőrzi, hogy a karakterláncban bárhol előfordul-e részkarakterlánc
Nincs benne() Ellenőrzi, hogy a karakterláncban bárhol előfordul-e részkarakterlánc
csak tartalmaz() Ellenőrzi, hogy egy részkarakterlánc szerepel-e egy karakterláncban
részkarakterlánc() Egy részkarakterlánc beszerzése
hasított() Egy karakterlánc felosztása részkarakterláncokra
csatlakozik() részkarakterláncok összefűzése
eltávolítás() Egy részkarakterlánc eltávolítása
csere() Cserélje ki a részkarakterláncot
countMatch() A mérkőzések számának számolása

StringUtils.isEmpty() és StringUtils.isBlank()

Mindkét módszerrel ellenőrizhető, hogy egy karakterlánc tartalmaz-e szöveget. Igazat adnak vissza, ha a karakterlánc valóban üres. Ezenkívül az isBlank() igazat ad vissza, ha a karakterlánc csak szóközt tartalmaz.

Saját inverz metódusaik is vannak: isNotEmpty() és isNotBlank() .

Nézzük meg, hogyan használhatod az isEmpty()-t a java.lang.String.isEmpty() megfelelőjével együtt , valamint az isBlank()-t :

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

Itt három String típusú változó található . Az egyik nullára mutat , a második nem null , de nincs tartalma (üres karakterlánc), a harmadik pedig nem üres, hanem üres eredményt fog kiírni.

A kód futtatása a következőket eredményezi:

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

A java.lang.String- be beépített isEmpty() metódus nem null safe . Könnyen kap egy NullPointerException kivételt , ha megpróbálja ellenőrizni, hogy üres-e, mert a metódust null hivatkozáson hívja meg . Előzetesen ellenőrizni kell, hogy a hivatkozás érvénytelen-e:

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

Ennek most a következő az eredménye:

emptyValue is emptyValue
blankValue is blankValue

És ha ezeket a módszereket tovább teszteljüknullString:

String nullValue = null;

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

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

Akkor kapjuk:

nullValue is emptyValue
nullValue is blankValue

A StringUtils metódusok null biztonságosak , és akkor is a várt eredményt adják, ha nullát adnak át .

StringUtils.equals()

Ez a módszer összehasonlít két karakterláncot, és igaz értéket ad vissza , ha azok azonosak, vagy ha mindkét hivatkozás nullra mutat , de ügyeljen arra, hogy ez a módszer megkülönbözteti a kis- és nagybetűket.

Lássuk, hogyan működik:

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

Eredmény:

true
false
false
true
false

A StringUtils equals() metódusának összehasonlítása a java.lang.String.equals() -val :

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

Ez visszavezeti a következőkhöz:

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

Ismét egy metódus null hivatkozáson való meghívása NullPointerExceptiont eredményez , és használat előtt ellenőriznie kell, hogy a referenciaváltozó nulla -e.

StringUtils.compare()

A módszer deklarációja így néz ki:

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

Ez a metódus két karakterláncot lexikográfiailag hasonlít össze, ahogy a java.lang.String.compareTo() metódus teszi , és a következőt adja vissza:

  • 0, ha str1 egyenlő str2-vel (vagy mindkettő nulla)
  • Az érték kisebb, mint 0, ha str1 kisebb, mint str2
  • 0-nál nagyobb érték, ha str1 nagyobb, mint str2

A lexikográfiai rend a szótárrend. Lássuk, hogyan használhatjuk ezt a programunkban:

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

Kapunk:

0
-1
1
32
0

Megjegyzés: A null értéket kisebbnek tekintjük, mint a nem null értéket . Két null értéket egyenlőnek tekintünk.

Annak ellenőrzése, hogy egy karakterlánc tartalmaz-e másik részkarakterláncot

Ehhez a StringUtils 5 módszerrel rendelkezik:

  • tartalmazza ()
  • tartalmazza IgnoreCase()
  • tartalmazAny()
  • Nincs benne()
  • csak tartalmaz()

A include() metódus igaz vagy hamis értéket ad vissza attól függően, hogy a keresési sorozat egy másik sorozatban szerepel-e vagy sem.

Ha nullát adunk át egy ilyen metódusnak, akkor false értéket ad vissza . Ha nem null értéket adunk át , a metódus egyszerűen meghívja a java.lang.String.indexOf(String str) függvényt az átadott objektumon.

Példák:

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

A metódus megkülönbözteti a kis- és nagybetűket, így az utolsó hívás is false értéket ad vissza :

false
true
false
false

A includeAny() metódus igazat ad vissza , ha az első argumentumként átadott karakterlánc legalább egyet tartalmaz a 2-N argumentumban átadott részkarakterláncok közül.

Példa:

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

Megjelenik:

true

Ez a módszer is megkülönbözteti a kis- és nagybetűket.

includeNone() metódus

Ha ellenőrizni kell, hogy egy adott karakterlánc nem tartalmaz-e semmit a listából, használhatja a includeNone() metódust . Az első paraméter egy karakterlánc, a következő paraméterek pedig olyan karakterláncok, amelyek nem lehetnek a célnyelőben.

Példa:

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

Konzol kimenet:

false

Munka részkarakterláncokkal

A részkarakterláncokkal végzett munka hasonló a String osztály metódusaival való munkához :

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

Ezek a metódusok egy részkarakterláncot adnak vissza az str karakterláncból . A karakterláncot két index adja: start és end . És ahogy az lenni szokott a Java-ban, a tartomány utolsó karaktere az end-1 . Mi az előnye ezeknek a módszereknek?

Ha nullát adunk át egy ilyen metódusnak, az egyszerűen nullát ad vissza, ahelyett, hogy kivételt dobna. Ezek a módszerek támogatják a negatív indexértékeket. Ebben az esetben a karakterlánc zárt huroknak számít. Az utolsó karaktert az első követi, és így tovább.

Lássuk, hogyan tudjuk használni:

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

A fenti kód futtatása a következőket eredményezi:

ts j
ets java
null

StringUtils.split()

Egy metódus, amely lehetővé teszi, hogy egy karakterláncot részkarakterláncokra ossza fel egy speciális határoló karakter használatával. Ha van ilyen a célkarakterláncban, akkor a metódus részkarakterláncok tömbjét adja vissza. Ha nincs karakter, akkor a rendszer egy üres tömböt ad vissza. Nos, ha a null értéket adjuk át a metódusnak, akkor a null értéket adja vissza . Nézzük meg ezt a kódot és a módszer működését:

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

Eredmény:

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

StringUtils.join()

A join() metódus lehetővé teszi karakterláncok tömbjének összefűzését egyetlen karakterláncba. Ugyanakkor egy speciális elválasztó karakter is átadható neki, amely a kapott karakterláncban részkarakterek közé kerül. És ha nullát adunk át a metódusnak, akkor nullát ad vissza .

Ez a metódus pontosan az ellentéte a split() metódusnak . Nézzük ezt az egyszerű példát:

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

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

A fenti kód futtatása a következőket eredményezi:

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

StringUtils.replace()

Megkeres egy karakterláncot egy karakterláncon belül, megkeresi, ha létezik, és minden előfordulását lecseréli egy új karakterláncra.

A módszer deklarációja így néz ki:

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

Ha a keresési karakterlánc nem található a szövegben, akkor nem történik semmi, és a szöveg ugyanaz marad. Ugyanezt a logikát követve, ha a szöveg null , akkor ez a metódus null -ot ad vissza . Ha null karakterláncot keres , vagy egy részstringet nullra cserél , akkor a metódus az eredeti karakterláncot adja vissza.

Próbáljuk ki ezt a módszert:

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

Eredmény:

CodeGym is the cool