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