Einführung in StringUtils

StringUtils ist die am häufigsten verwendete Apache Commons-Klasse. Es enthält verschiedene Dienstprogramme und Methoden, die Entwicklern helfen, das Schreiben von Standardcodes oder einfach unhandlichem Code für grundlegende Vorgänge zu vermeiden.

Viele der Methoden in der StringUtils- Klasse haben ihre java.lang.String- Entsprechungen , sind aber im Gegensatz zu den java.lang.String -Methoden nullsicher. Dies bedeutet, dass eine NullPointerException nicht im unerwartetsten Moment ausgelöst wird .

Apache Commons enthält eine Reihe von Methoden und wir werden uns einige der am häufigsten verwendeten ansehen.

Liste der StringUtils-Methoden:

ist leer() Überprüft, ob eine Zeichenfolge leer ist
gleich() Vergleicht Zeichenfolgen
vergleichen() Vergleicht Zeichenfolgen
Index von() Einen Teilstring in einem String finden
lastIndexOf() Einen Teilstring in einem String finden
enthält() Überprüft, ob ein Teilstring in einem String enthalten ist
enthältIgnoreCase() Überprüft das Vorkommen eines Teilstrings in einem String und ignoriert dabei die Groß-/Kleinschreibung
enthältAny() Überprüft, ob ein Teilstring irgendwo in einem String vorkommt
enthältNone() Überprüft, ob ein Teilstring irgendwo in einem String vorkommt
enthältOnly() Überprüft, ob ein Teilstring in einem String enthalten ist
Teilzeichenfolge() Einen Teilstring abrufen
Teilt() Aufteilen einer Zeichenfolge in Teilzeichenfolgen
verbinden() Teilzeichenfolgen verketten
entfernen() Entfernen eines Teilstrings
ersetzen() Teilzeichenfolge ersetzen
countMatches() Zählen der Anzahl der Übereinstimmungen

StringUtils.isEmpty() und StringUtils.isBlank()

Mit beiden Methoden wird überprüft, ob eine Zeichenfolge Text enthält. Sie geben true zurück, wenn die Zeichenfolge wirklich leer ist. Darüber hinaus gibt isBlank() auch true zurück , wenn die Zeichenfolge nur Leerzeichen enthält.

Sie haben auch ihre eigenen inversen Methoden: isNotEmpty() und isNotBlank() .

Sehen wir uns an, wie Sie isEmpty() zusammen mit seinem java.lang.String.isEmpty() -Gegenstück sowie isBlank() verwenden können :

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

Hier gibt es drei Variablen vom Typ String . Einer zeigt auf null , der zweite ist nicht null , hat aber keinen Inhalt (eine leere Zeichenfolge) und der dritte ist nicht leer, gibt aber ein leeres Ergebnis aus.

Das Ausführen dieses Codes führt zu Folgendem:

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

Die in java.lang.String integrierte Methode isEmpty() ist nicht nullsicher . Sie erhalten leicht eine NullPointerException, wenn Sie versuchen zu überprüfen, ob sie leer ist, da Sie die Methode für eine Nullreferenz aufrufen . Es muss vorab geprüft werden, ob die Referenz null ist:

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

Das ergibt nun:

emptyValue is emptyValue
blankValue is blankValue

Und wenn wir diese Methoden weiter testennullString:

String nullValue = null;

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

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

Dann erhalten wir:

nullValue is emptyValue
nullValue is blankValue

Die StringUtils- Methoden sind nullsicher und liefern das erwartete Ergebnis, selbst wenn ihnen null übergeben wird .

StringUtils.equals()

Diese Methode vergleicht zwei Zeichenfolgen und gibt true zurück , wenn sie identisch sind oder wenn beide Referenzen auf null verweisen . Beachten Sie jedoch, dass bei dieser Methode die Groß-/Kleinschreibung beachtet wird.

Mal sehen, wie es funktioniert:

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

Ergebnis:

true
false
false
true
false

So vergleichen Sie die Methode equal() von StringUtils mit 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"));

Dies bringt Sie zurück zu:

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

Auch hier führt der Aufruf einer Methode für eine Nullreferenz zu einer NullPointerException und Sie müssen prüfen, ob die Referenzvariable null ist , bevor Sie sie verwenden.

StringUtils.compare()

Die Deklaration dieser Methode sieht folgendermaßen aus:

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

Diese Methode vergleicht zwei Zeichenfolgen lexikografisch, wie es die Methode java.lang.String.compareTo() tut , und gibt Folgendes zurück:

  • 0, wenn str1 gleich str2 ist (oder beide null sind)
  • Der Wert ist kleiner als 0, wenn str1 kleiner als str2 ist
  • Wert größer als 0, wenn str1 größer als str2 ist

Die lexikografische Reihenfolge ist die Wörterbuchreihenfolge. Mal sehen, wie wir dies in unserem Programm verwenden können:

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

Wir bekommen:

0
-1
1
32
0

Hinweis: Ein Nullwert gilt als kleiner als ein Nicht- Nullwert . Zwei Nullwerte gelten als gleich .

Prüfen, ob eine Zeichenfolge eine andere Teilzeichenfolge enthält

Zu diesem Zweck verfügt StringUtils über 5 Methoden:

  • enthält()
  • enthältIgnoreCase()
  • enthältAny()
  • enthältNone()
  • enthältOnly()

Die Methode enthält() gibt true oder false zurück, je nachdem, ob die Suchsequenz in einer anderen Sequenz enthalten ist oder nicht.

Wenn null an eine solche Methode übergeben wird , gibt sie false zurück . Wenn ein Wert ungleich Null übergeben wird , ruft die Methode einfach java.lang.String.indexOf(String str) für das übergebene Objekt auf.

Beispiele:

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

Die Methode unterscheidet zwischen Groß- und Kleinschreibung, daher wird auch der letzte Aufruf false zurückgeben :

false
true
false
false

Die Methode „containsAny()“ gibt „true“ zurück , wenn die als erstes Argument übergebene Zeichenfolge mindestens eine der in den 2-N Argumenten übergebenen Teilzeichenfolgen enthält.

Beispiel:

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

Zeigt Folgendes an:

true

Bei dieser Methode wird auch die Groß-/Kleinschreibung beachtet.

enthältNone()-Methode

Wenn Sie überprüfen müssen, dass eine bestimmte Zeichenfolge nichts aus der Liste enthält, können Sie die Methode enthältNone() verwenden . Der erste Parameter ist eine Zeichenfolge und die folgenden Parameter sind Zeichenfolgen, die nicht in der Zielsenke enthalten sein sollten.

Beispiel:

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

Konsolenausgabe:

false

Arbeiten mit Teilzeichenfolgen

Die Arbeit mit Teilstrings ähnelt der Arbeit mit Methoden der String- Klasse :

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

Diese Methoden geben einen Teilstring des Strings str zurück . Die Zeichenfolge wird durch zwei Indizes angegeben: start und end . Und wie in Java üblich ist das letzte Zeichen des Bereichs end-1 . Was ist der Vorteil dieser Methoden?

Wenn Sie einer solchen Methode null übergeben , gibt sie einfach null zurück , anstatt eine Ausnahme auszulösen. Diese Methoden unterstützen negative Indexwerte. In diesem Fall wird die Zeichenfolge als geschlossene Schleife betrachtet. Auf das letzte Zeichen folgt das erste und so weiter.

Mal sehen, wie wir es nutzen können:

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

Wenn wir den obigen Code ausführen, erhalten wir:

ts j
ets java
null

StringUtils.split()

Eine Methode, mit der Sie eine Zeichenfolge mithilfe eines speziellen Trennzeichens in Teilzeichenfolgen aufteilen können. Wenn in der Zielzeichenfolge eine solche vorhanden ist, gibt die Methode ein Array von Teilzeichenfolgen zurück. Wenn kein Zeichen vorhanden ist, wird ein leeres Array zurückgegeben. Nun, wenn null an die Methode übergeben wird , gibt sie null zurück . Schauen wir uns diesen Code und die Funktionsweise der Methode an:

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

Ergebnis:

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

StringUtils.join()

Mit der Methode „join()“ können Sie ein Array von Zeichenfolgen zu einer einzelnen Zeichenfolge verketten. Gleichzeitig kann ihm ein spezielles Trennzeichen übergeben werden, das zwischen Teilzeichenfolgen in der resultierenden Zeichenfolge eingefügt wird. Und wenn null an die Methode übergeben wird , gibt sie null zurück .

Diese Methode ist das genaue Gegenteil der split()- Methode . Schauen wir uns dieses einfache Beispiel an:

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

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

Wenn wir den obigen Code ausführen, erhalten wir:

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

StringUtils.replace()

Sucht nach einer Zeichenfolge innerhalb einer Zeichenfolge, findet sie, sofern vorhanden, und ersetzt alle Vorkommen dieser Zeichenfolge durch eine neue Zeichenfolge.

Die Deklaration dieser Methode sieht folgendermaßen aus:

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

Wenn der Suchbegriff nicht im Text gefunden wird, passiert nichts und der Text bleibt gleich. Nach der gleichen Logik gibt diese Methode null zurück, wenn der Text null ist . Wenn Sie nach einer Nullzeichenfolge suchen oder eine Teilzeichenfolge durch null ersetzen , gibt die Methode die ursprüngliche Zeichenfolge zurück.

Probieren wir diese Methode aus:

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

Ergebnis:

CodeGym is the cool