Introduktion till StringUtils
StringUtils är den mest använda Apache Commons-klassen. Den innehåller olika verktyg och metoder som hjälper utvecklare att undvika att skriva bottenplatta eller helt enkelt svårhanterlig kod för grundläggande operationer.
Många av metoderna i klassen StringUtils har sina java.lang.String -ekvivalenter , men till skillnad från java.lang.String -metoderna är de nollsäkra. Detta innebär att ett NullPointerException inte kastas vid det mest oväntade ögonblicket.
Apache Commons innehåller ett antal metoder, och vi ska titta på några av de mest använda.
Lista över StringUtils-metoder:
är tom() | Kontrollerar om en sträng är tom |
lika() | Jämför strängar |
jämföra() | Jämför strängar |
index för() | Hitta en delsträng i en sträng |
lastIndexOf() | Hitta en delsträng i en sträng |
innehåller() | Kontrollerar om en delsträng finns i en sträng |
containsIgnoreCase() | Kontrollerar förekomsten av en delsträng i en sträng och ignorerar skiftläge |
innehåller Alla() | Kontrollerar om en delsträng förekommer någonstans i en sträng |
innehåller Ingen() | Kontrollerar om en delsträng förekommer någonstans i en sträng |
innehåller endast() | Kontrollerar om en delsträng finns i en sträng |
substring() | Få en delsträng |
dela() | Dela en sträng i delsträngar |
Ansluta sig() | sammanfoga delsträngar |
avlägsna() | Ta bort en delsträng |
byta ut() | Ersätt delsträng |
countMatches() | Räknar antalet matcher |
StringUtils.isEmpty() och StringUtils.isBlank()
Båda metoderna används för att kontrollera om en sträng innehåller någon text. De returnerar sant om strängen är riktigt tom. Dessutom kommer isBlank() också att returnera true om strängen bara innehåller mellanslag.
De har också sina egna inversa metoder: isNotEmpty() och isNotBlank() .
Låt oss se hur du kan använda isEmpty() tillsammans med dess java.lang.String.isEmpty() motsvarighet , såväl som 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");
}
Det finns tre variabler av typen String här . En pekar på null , den andra är inte null men har inget innehåll (en tom sträng), och den tredje är inte tom utan kommer att skriva ut ett tomt resultat.
Att köra den här koden resulterar i:
emptyValue is emptyValue
blankValue is blankValue
Exception in thread "main" java.lang.NullPointerException
Metoden isEmpty() inbyggd i java.lang.String är inte null säker . Du får lätt ett NullPointerException om du försöker kontrollera om det är tomt, eftersom du anropar metoden på en nollreferens . Det kommer att vara nödvändigt att kontrollera i förväg om referensen är null:
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");
}
Nu resulterar detta i:
emptyValue is emptyValue
blankValue is blankValue
Och om vi testar dessa metoder pånullString:
String nullValue = null;
if(StringUtils.isEmpty(nullValue)) {
System.out.println("nullValue is emptyValue");
}
if(StringUtils.isBlank(nullValue)) {
System.out.println("nullValue is blankValue");
}
Då får vi:
nullValue is emptyValue
nullValue is blankValue
StringUtils- metoderna är nullsäkra och ger det förväntade resultatet även om de godkänns null .
StringUtils.equals()
Den här metoden jämför två strängar och returnerar true om de är identiska eller om båda referenserna pekar på null , men tänk på att den här metoden är skiftlägeskänslig.
Låt oss se hur det fungerar:
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"));
Resultat:
true
false
false
true
false
För att jämföra metoden equals() från StringUtils med 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"));
Detta tar dig tillbaka till:
true
false
Exception in thread "main" java.lang.NullPointerException
Återigen, anrop av en metod på en nollreferens resulterar i en NullPointerException , och du måste kontrollera om referensvariabeln är null innan du använder den.
StringUtils.compare()
Deklarationen av denna metod ser ut så här:
public static int compare(final String str1, final String str2)
Den här metoden jämför två strängar lexikografiskt, som java.lang.String.compareTo() -metoden gör , och returnerar:
- 0 om str1 är lika med str2 (eller båda är null)
- Värdet är mindre än 0 om str1 är mindre än str2
- Värde större än 0 om str1 är större än str2
Den lexikografiska ordningen är ordboksordningen. Låt oss se hur vi kan använda detta i vårt program:
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"));
Vi får:
0
-1
1
32
0
Obs! Ett nollvärde anses vara mindre än ett icke- nullvärde . Två nollvärden anses vara lika .
Kontrollera om en sträng innehåller en annan delsträng
För att göra detta har StringUtils 5 metoder:
- innehåller()
- containsIgnoreCase()
- innehåller Alla()
- innehåller Ingen()
- innehåller endast()
Metoden contains() returnerar true eller false beroende på om söksekvensen finns i en annan sekvens eller inte.
Om null skickas till en sådan metod kommer den att returnera false . Om icke- null skickas kommer metoden helt enkelt att anropa java.lang.String.indexOf(String str) på det skickade objektet.
Exempel:
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"));
Metoden är skiftlägeskänslig, så det senaste anropet kommer också att returnera false :
false
true
false
false
Metoden containsAny() returnerar true om strängen som skickas som det första argumentet innehåller minst en av delsträngarna som skickas i 2-N-argumenten.
Exempel:
String value = "CodeGym is cool";
System.out.println(StringUtils.containsAny(value, "cool", "c00l", "bro", "hello"));
Kommer att visa:
true
Denna metod är också skiftlägeskänslig.
containsNone()-metoden
När du behöver kontrollera att en viss sträng inte innehåller något från listan kan du använda metoden containsNone() . Den första parametern är en sträng och följande parametrar är strängar som inte ska finnas i målsänkan.
Exempel:
String s = "CodeGym is cool";
System.out.println(StringUtils.containsNone(s, 'g', 'a'));
Konsolutgång:
false
Arbeta med delsträngar
Att arbeta med delsträngar liknar att arbeta med metoder i klassen String :
substring(String str, int start)
substring (String str, int start, int end)
Dessa metoder returnerar en delsträng från strängen str . Strängen ges av två index: start och slut . Och som vanligt i Java är det sista tecknet i intervallet end-1 . Vad är fördelen med dessa metoder?
Om du skickar null till en sådan metod kommer den helt enkelt att returnera null istället för att skapa ett undantag. Dessa metoder stöder negativa indexvärden. I det här fallet betraktas strängen som en sluten slinga. Det sista tecknet följs av det första och så vidare.
Låt oss se hur vi kan använda det:
System.out.println(StringUtils.substring("lets java", 2, 6));
System.out.println(StringUtils.substring("lets java", -8));
System.out.println(StringUtils.substring(null, 3));
Att köra koden ovan ger oss:
ts j
ets java
null
StringUtils.split()
En metod som låter dig dela upp en sträng i delsträngar med hjälp av ett speciellt avgränsningstecken. Om det finns en i målsträngen kommer metoden att returnera en array av delsträngar. Om det inte finns något tecken kommer en tom array att returneras. Tja, om null skickas till metoden kommer den att returnera null . Låt oss ta en titt på den här koden och hur metoden fungerar:
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("", '.')));
Resultat:
[Address, City, State, Zip, Phone, Email, Password]
null
[]
StringUtils.join()
Metoden join() låter dig sammanfoga en array av strängar till en enda sträng. Samtidigt kan ett speciellt separatortecken skickas till den, som kommer att läggas till mellan delsträngar i den resulterande strängen. Och om null skickas till metoden kommer den att returnera null .
Denna metod är raka motsatsen till split()- metoden . Låt oss titta på detta enkla exempel:
String myData = "Address, City, State, Zip, Phone, Email, Password";
String[] myString = StringUtils.split(myData, ',');
System.out.println(StringUtils.join(myString, '-'));
Att köra koden ovan ger oss:
Address- City- State- Zip- Phone- Email- Password
StringUtils.replace()
Söker efter en sträng i en sträng, hittar den om den finns och ersätter alla förekomster av den med en ny sträng.
Deklarationen av denna metod ser ut så här:
public static String replace(final String text, final String searchString, final String replacement)
Om söksträngen inte hittas i texten kommer ingenting att hända och texten förblir densamma. Enligt samma logik, om texten är null , returnerar denna metod null . Om du letar efter en nollsträng eller ersätter en delsträng med null , kommer metoden att returnera den ursprungliga strängen.
Låt oss prova den här metoden:
String value = "CodeGym is the best";
System.out.println(StringUtils.replace(value, "best", "cool"));
Resultat:
CodeGym is the cool