Inleiding tot StringUtils

StringUtils is de meest gebruikte Apache Commons-klasse. Het bevat verschillende hulpprogramma's en methoden die ontwikkelaars helpen om het schrijven van standaardteksten of simpelweg logge code voor basisbewerkingen te vermijden.

Veel van de methoden in de StringUtils- klasse hebben hun java.lang.String- equivalenten , maar zijn, in tegenstelling tot de java.lang.String- methoden , null-safe. Dit betekent dat er niet op het meest onverwachte moment een NullPointerException wordt gegenereerd.

Apache Commons bevat een aantal methoden, en we zullen enkele van de meest gebruikte bekijken.

Lijst met StringUtils-methoden:

is leeg() Controleert of een string leeg is
is gelijk aan () Vergelijkt strings
vergelijken() Vergelijkt strings
index van() Een subtekenreeks zoeken in een tekenreeks
laatsteIndexVan() Een subtekenreeks zoeken in een tekenreeks
bevat() Controleert of een substring in een string zit
bevatIgnoreCase() Controleert op het voorkomen van een subtekenreeks in een tekenreeks, waarbij hoofdlettergebruik wordt genegeerd
bevatAny() Controleert of een subtekenreeks ergens in een tekenreeks voorkomt
bevatGeen() Controleert of een subtekenreeks ergens in een tekenreeks voorkomt
bevatAlleen() Controleert of een substring in een string zit
subtekenreeks() Een subtekenreeks ophalen
splitsen() Een tekenreeks splitsen in subtekenreeksen
meedoen() subtekenreeksen samenvoegen
verwijderen() Een subtekenreeks verwijderen
vervangen() Subtekenreeks vervangen
countMatches() Het aantal wedstrijden tellen

StringUtils.isEmpty() en StringUtils.isBlank()

Beide methoden worden gebruikt om te controleren of een string tekst bevat. Ze geven true terug als de string echt leeg is. Bovendien zal isBlank() ook waar teruggeven als de tekenreeks alleen spaties bevat.

Ze hebben ook hun eigen omgekeerde methoden: isNotEmpty() en isNotBlank() .

Laten we eens kijken hoe u isEmpty() samen met zijn tegenhanger java.lang.String.isEmpty() kunt gebruiken , evenals 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");
}

Er zijn hier drie variabelen van het type String . De ene wijst naar null , de tweede is niet null maar heeft geen inhoud (een lege string), en de derde is niet leeg maar zal een leeg resultaat afdrukken.

Het uitvoeren van deze code resulteert in:

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

De methode isEmpty() die is ingebouwd in java.lang.String is niet null safe . U krijgt gemakkelijk een NullPointerException als u probeert te controleren of deze leeg is, omdat u de methode op een null- referentie aanroept . Het zal nodig zijn om vooraf te controleren of de referentie null is:

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

Dit resulteert nu in:

emptyValue is emptyValue
blankValue is blankValue

En als we deze methoden testen opnullString:

String nullValue = null;

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

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

Dan krijgen we:

nullValue is emptyValue
nullValue is blankValue

De StringUtils- methoden zijn null- safe en produceren het verwachte resultaat, zelfs als ze null worden doorgegeven .

StringUtils.equals()

Deze methode vergelijkt twee strings en retourneert true als ze identiek zijn of als beide referenties naar null verwijzen , maar houd er rekening mee dat deze methode hoofdlettergevoelig is.

Laten we eens kijken hoe het werkt:

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

Resultaat:

true
false
false
true
false

Om de methode equals() van StringUtils te vergelijken met 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"));

Dit brengt je terug naar:

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

Nogmaals, het aanroepen van een methode op een null- referentie resulteert in een NullPointerException , en u moet controleren of de referentievariabele null is voordat u deze gebruikt.

StringUtils.compare()

De declaratie van deze methode ziet er als volgt uit:

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

Deze methode vergelijkt twee strings lexicografisch, zoals de methode java.lang.String.compareTo() doet , en retourneert:

  • 0 als str1 gelijk is aan str2 (of beide zijn null)
  • De waarde is kleiner dan 0 als str1 kleiner is dan str2
  • Waarde groter dan 0 als str1 groter is dan str2

De lexicografische volgorde is de woordenboekvolgorde. Laten we eens kijken hoe we dit in ons programma kunnen gebruiken:

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

We krijgen:

0
-1
1
32
0

Opmerking: een null- waarde wordt als kleiner beschouwd dan een niet- null- waarde . Twee nulwaarden worden als gelijk beschouwd.

Controleren of een string een andere substring bevat

Om dit te doen, heeft StringUtils 5 methoden:

  • bevat()
  • bevatIgnoreCase()
  • bevatAny()
  • bevatGeen()
  • bevatAlleen()

De methode contain() retourneert waar of onwaar , afhankelijk van of de zoekreeks al dan niet in een andere reeks is opgenomen.

Als null wordt doorgegeven aan een dergelijke methode , wordt false geretourneerd . Als niet- null wordt doorgegeven , roept de methode gewoon java.lang.String.indexOf(String str) aan op het doorgegeven object.

Voorbeelden:

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

De methode is hoofdlettergevoelig, dus de laatste aanroep zal ook false retourneren :

false
true
false
false

De methode comesAny() retourneert true als de tekenreeks die is doorgegeven als het eerste argument, ten minste één van de subtekenreeksen bevat die zijn doorgegeven in de 2-N argumenten.

Voorbeeld:

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

Wordt weergegeven:

true

Deze methode is ook hoofdlettergevoelig.

bevatNone() methode

Als u wilt controleren of een bepaalde tekenreeks niets uit de lijst bevat, kunt u de methode comesNone() gebruiken . De eerste parameter is een tekenreeks en de volgende parameters zijn tekenreeksen die niet in de doelsink mogen staan.

Voorbeeld:

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

Console-uitvoer:

false

Werken met subtekenreeksen

Het werken met substrings is vergelijkbaar met het werken met methodes van de klasse String :

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

Deze methoden retourneren een substring van de string str . De string wordt gegeven door twee indices: start en end . En zoals gebruikelijk in Java is het laatste teken van het bereik end-1 . Wat is het voordeel van deze methodes?

Als je null doorgeeft aan zo'n methode , zal het gewoon null retourneren in plaats van een uitzondering te genereren. Deze methoden ondersteunen negatieve indexwaarden. In dit geval wordt de string beschouwd als een gesloten lus. Het laatste teken wordt gevolgd door het eerste, enzovoort.

Laten we eens kijken hoe we het kunnen gebruiken:

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

Het uitvoeren van de bovenstaande code geeft ons:

ts j
ets java
null

StringUtils.split()

Een methode waarmee u een tekenreeks kunt splitsen in subtekenreeksen met behulp van een speciaal scheidingsteken. Als er een in de doeltekenreeks staat, retourneert de methode een reeks subtekenreeksen. Als er geen teken is, wordt een lege array geretourneerd. Welnu, als null wordt doorgegeven aan de methode, zal het null retourneren . Laten we eens kijken naar deze code en hoe de methode werkt:

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

Resultaat:

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

StringUtils.join()

Met de methode join() kunt u een reeks tekenreeksen samenvoegen tot één enkele tekenreeks. Tegelijkertijd kan er een speciaal scheidingsteken aan worden doorgegeven, dat wordt toegevoegd tussen substrings in de resulterende string. En als null wordt doorgegeven aan de methode , dan zal het null retourneren .

Deze methode is precies het tegenovergestelde van de methode split() . Laten we naar dit eenvoudige voorbeeld kijken:

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

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

Het uitvoeren van de bovenstaande code geeft ons:

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

StringUtils.replace()

Zoekt naar een tekenreeks binnen een tekenreeks, vindt deze als deze bestaat en vervangt alle voorkomens ervan door een nieuwe tekenreeks.

De declaratie van deze methode ziet er als volgt uit:

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

Als de zoekstring niet in de tekst wordt gevonden, gebeurt er niets en blijft de tekst hetzelfde. Volgens dezelfde logica retourneert deze methode null als de tekst null is . Als u op zoek bent naar een null- string of een substring vervangt door null , dan zal de methode de originele string teruggeven.

Laten we deze methode proberen:

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

Resultaat:

CodeGym is the cool