Introduktion til StringUtils

StringUtils er den mest brugte Apache Commons-klasse. Den indeholder forskellige værktøjer og metoder, der hjælper udviklere med at undgå at skrive kedelplade eller simpelthen uhåndterlig kode til grundlæggende operationer.

Mange af metoderne i StringUtils- klassen har deres java.lang.String- ækvivalenter , men i modsætning til java.lang.String- metoderne er de null-sikre. Det betyder, at en NullPointerException ikke kastes på det mest uventede tidspunkt.

Apache Commons indeholder en række metoder, og vi vil se på nogle af de mest brugte.

Liste over StringUtils metoder:

er tom() Kontrollerer, om en streng er tom
lige med() Sammenligner strenge
sammenligne() Sammenligner strenge
indeks af() At finde en understreng i en streng
lastIndexOf() At finde en understreng i en streng
indeholder() Kontrollerer, om en understreng er i en streng
containsIgnoreCase() Kontrollerer forekomsten af ​​en understreng i en streng og ignorerer store og små bogstaver
indeholder enhver() Kontrollerer, om en understreng forekommer nogen steder i en streng
indeholder Ingen() Kontrollerer, om en understreng forekommer nogen steder i en streng
indeholderKun() Kontrollerer, om en understreng er i en streng
understreng() Henter en understreng
dele() Opdeling af en streng i understrenge
tilslutte() sammenkæde delstrenge
fjerne() Fjernelse af en understreng
erstatte() Erstat understreng
countMatches() Tæller antallet af kampe

StringUtils.isEmpty() og StringUtils.isBlank()

Begge metoder bruges til at kontrollere, om en streng indeholder tekst. De returnerer sandt, hvis strengen er virkelig tom. Derudover vil isBlank() også returnere sand , hvis strengen kun indeholder mellemrum.

De har også deres egne inverse metoder: isNotEmpty() og isNotBlank() .

Lad os se, hvordan du kan bruge isEmpty() sammen med dets java.lang.String.isEmpty() -modstykke samt 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");
}

Der er tre variabler af typen String her . Den ene peger på null , den anden er ikke null , men har intet indhold (en tom streng), og den tredje er ikke tom, men vil udskrive et tomt resultat.

Kørsel af denne kode resulterer i:

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

Metoden isEmpty() indbygget i java.lang.String er ikke null sikker . Du vil nemt få en NullPointerException, hvis du prøver at tjekke, om den er tom, fordi du kalder metoden på en null reference . Det vil være nødvendigt at kontrollere på forhånd, om referencen er 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");
}

Dette resulterer nu i:

emptyValue is emptyValue
blankValue is blankValue

Og hvis vi tester disse 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");
}

Så får vi:

nullValue is emptyValue
nullValue is blankValue

StringUtils metoderne er null sikre og giver det forventede resultat, selvom de er bestået null .

StringUtils.equals()

Denne metode sammenligner to strenge og returnerer sand , hvis de er identiske, eller hvis begge referencer peger på null , men vær opmærksom på, at denne metode skelner mellem store og små bogstaver.

Lad os se, hvordan det virker:

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

For at sammenligne equals() -metoden fra 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"));

Dette bringer dig tilbage til:

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

Igen, kald af en metode på en nul- reference resulterer i en NullPointerException , og du skal kontrollere, om referencevariablen er null , før du bruger den.

StringUtils.compare()

Deklarationen af ​​denne metode ser således ud:

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

Denne metode sammenligner to strenge leksikografisk, som java.lang.String.compareTo() metoden gør , og returnerer:

  • 0 hvis str1 er lig med str2 (eller begge er nul)
  • Værdien er mindre end 0, hvis str1 er mindre end str2
  • Værdi større end 0, hvis str1 er større end str2

Den leksikografiske rækkefølge er ordbogsrækkefølgen. Lad os se, hvordan vi kan bruge dette i vores 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

Bemærk: En nulværdi betragtes som mindre end en ikke- nulværdi . To nulværdier anses for at være ens .

Kontrollerer, om en streng indeholder en anden understreng

For at gøre dette har StringUtils 5 metoder:

  • indeholder()
  • containsIgnoreCase()
  • indeholder enhver()
  • indeholder Ingen()
  • indeholderKun()

Metoden contains() returnerer sand eller falsk afhængigt af, om søgesekvensen er indeholdt i en anden sekvens eller ej.

Hvis null overføres til en sådan metode , vil den returnere falsk . Hvis ikke- null sendes , vil metoden blot kalde java.lang.String.indexOf(String str) på det beståede objekt.

Eksempler:

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 skelner mellem store og små bogstaver, så det sidste kald vil også returnere falsk :

false
true
false
false

Metoden containsAny() returnerer sand , hvis strengen, der blev sendt som det første argument, indeholder mindst én af understrengene, der er sendt i 2-N-argumenterne.

Eksempel:

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

Vil vise:

true

Denne metode skelner også mellem store og små bogstaver.

containsNone() metoden

Når du skal kontrollere, at en bestemt streng ikke indeholder noget fra listen, kan du bruge metoden containsNone() . Den første parameter er en streng, og de følgende parametre er strenge, der ikke bør være i målvasken.

Eksempel:

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

Konsoludgang:

false

Arbejde med understrenge

At arbejde med understrenge svarer til at arbejde med metoder i String- klassen :

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

Disse metoder returnerer en understreng fra strengen str . Strengen er givet af to indekser: start og slut . Og som sædvanligt i Java er det sidste tegn i rækken end-1 . Hvad er fordelen ved disse metoder?

Hvis du overfører null til en sådan metode , vil den blot returnere null i stedet for at kaste en undtagelse. Disse metoder understøtter negative indeksværdier. I dette tilfælde betragtes strengen som en lukket sløjfe. Det sidste tegn efterfølges af det første og så videre.

Lad os se, hvordan vi kan bruge 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));

At køre koden ovenfor giver os:

ts j
ets java
null

StringUtils.split()

En metode, der giver dig mulighed for at opdele en streng i understrenge ved hjælp af et særligt skilletegn. Hvis der er en i målstrengen, vil metoden returnere et array af understrenge. Hvis der ikke er noget tegn, vil en tom matrix blive returneret. Nå, hvis null overføres til metoden , vil den returnere null . Lad os tage et kig på denne kode, og hvordan metoden virker:

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()

join()- metoden giver dig mulighed for at sammenkæde en række strenge til en enkelt streng. Samtidig kan et særligt separatortegn overføres til det, som vil blive tilføjet mellem understrenge i den resulterende streng. Og hvis null overføres til metoden , vil den returnere null .

Denne metode er det stik modsatte af split() metoden . Lad os se på dette simple eksempel:

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

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

At køre koden ovenfor giver os:

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

StringUtils.replace()

Søger efter en streng i en streng, finder den, hvis den findes, og erstatter alle forekomster af den med en ny streng.

Deklarationen af ​​denne metode ser således ud:

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

Hvis søgestrengen ikke findes i teksten, sker der ikke noget, og teksten forbliver den samme. Efter samme logik, hvis teksten er null , returnerer denne metode null . Hvis du leder efter en null- streng eller erstatter en understreng med null , vil metoden returnere den originale streng.

Lad os prøve denne metode:

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

Resultat:

CodeGym is the cool