Hole String von String in Java

Teilzeichenfolge aus Zeichenfolge in Java abrufen

1. Überblick

In diesem Tutorial erfahren Sie, wie Sie einen Teilstring ausString in Java abrufen.

Wir verwenden hauptsächlich Methoden aus der KlasseStringund wenige aus der KlasseStringUtilsvon Apache Commons.

In allen Beispielen werden wir arbeiten an:

String text = "Julia Evans was born on 25-09-1984. "
  + "She is currently living in the USA (United States of America).";

2. Maven-Abhängigkeiten

Um die KlasseStringUtils zu verwenden, die Teil der BibliothekApache Commons Lang ist, müssen Sie dem Maven-Projekt die folgende Abhängigkeit hinzufügen:


    org.apache.commons
    commons-lang3
    3.8

Sie finden die neueste Version dieser Bibliothekhere.

3. Verwenden vonsubstring

Dies ist die am häufigsten verwendete Methode zum Extrahieren einer Teilzeichenfolge. Sie können einen Startindex und einen optionalen Endindex angeben, um die dazwischen liegenden Zeichen zu extrahieren.

Wenn wir den Endindex nicht angeben, ist der Teilstring bis zum Ende derString. vollständig

Betrachten wir, wir wollen Julias Wohnsitzland extrahieren:

assertEquals("USA (United States of America).",
  text.substring(67));

Um den Punkt am Ende der Ausgabe zu entfernen, können wir die leicht modifizierte Version derselben Methode verwenden:

assertEquals("USA (United States of America)",
  text.substring(67, text.length() - 1));

In den obigen Beispielen haben wir die genaue Position verwendet, um den Teilstring zu extrahieren.

3.1. Erhalten eines Teilstrings ab einem bestimmten Zeichen

Falls die Position basierend auf einem Zeichen oderString dynamisch berechnet werden muss, können wir die MethodeindexOf verwenden:

assertEquals("United States of America",
  text.substring(text.indexOf('(') + 1, text.indexOf(')')));

Eine ähnliche Methode, die uns beim Auffinden unserer Teilzeichenfolge helfen kann, istlastIndexOf. Verwenden wirlastIndexOf, um das Jahr "1984" zu extrahieren. Es ist der Teil des Textes zwischen dem letzten Strich und dem ersten Punkt:

assertEquals("1984",
  text.substring(text.lastIndexOf('-') + 1, text.indexOf('.')));

SowohlindexOf als auchlastIndexOf können ein Zeichen oderString als Parameter verwenden. Extrahieren wir den Text „USA“ und den Rest des Textes in Klammern:

assertEquals("USA (United States of America)",
  text.substring(text.indexOf("USA"), text.indexOf(')') + 1));

4. Verwenden vonsubSequence

Die KlasseString bietet eine andere Methode namenssubSequence, die sich ähnlich wie die Methodesubstringverhält.

Der einzige Unterschied besteht darin, dass einCharSequence anstelle einesString zurückgegeben wird und nur mit einem bestimmten Start- und Endindex verwendet werden kann:

assertEquals("USA (United States of America)",
  text.subSequence(67, text.length() - 1));

5. Reguläre Ausdrücke verwenden

Reguläre Ausdrücke werden zu unserer Rettungif we have to extract a substring that matches a specific pattern. kommen

Im BeispielString, hat Julia das Geburtsdatum im Format "TT-MM-JJJJ". Wir können dieses Muster mit der Java-API für reguläre Ausdrücke abgleichen.

Zunächst müssen wir ein Muster für „TT-MM-JJJJ“ erstellen:

Pattern pattern = Pattern.compile("\\d{2}-\\d{2}-\\d{4}");

Anschließend wenden wir das Muster an, um eine Übereinstimmung mit dem angegebenen Text zu finden:

Matcher matcher = pattern.matcher(text);

Nach erfolgreicher Übereinstimmung können wir die übereinstimmendenString: extrahieren

if (matcher.find()) {
    Assert.assertEquals("25-09-1984", matcher.group());
}

Weitere Informationen zu den regulären Java-Ausdrücken finden Sie im Tutorial vonthis.

6. Verwenden vonsplit

Wir können diesplit-Methode aus derString-Klasse verwenden, um einen Teilstring zu extrahieren. Angenommen, wir möchten den ersten Satz aus dem BeispielString. extrahieren. Dies ist mitsplit recht einfach:

String[] sentences = text.split("\\.");

Da die Aufteilungsmethode einen regulären Ausdruck akzeptiert, mussten wir das Punktzeichen umgehen. Jetzt ist das Ergebnis ein Array von 2 Sätzen.

Wir können den ersten Satz verwenden (oder das gesamte Array durchlaufen):

assertEquals("Julia Evans was born on 25-09-1984", sentences[0]);

Bitte beachten Sie, dass es mit Apache OpenNLP bessere Möglichkeiten zur Satzerkennung und -tokenisierung gibt. Weitere Informationen zur OpenNLP-API finden Sie im Tutorial vonthis.

7. Verwenden vonScanner

Wir verwenden im AllgemeinenScanner, um primitive Typen zu analysieren, undStrings, um reguläre Ausdrücke zu verwenden. A Scanner breaks its input into tokens using a delimiter pattern, das standardmäßig mit Leerzeichen übereinstimmt.

Lassen Sie uns herausfinden, wie Sie damit den ersten Satz aus dem Beispieltext erhalten:

try (Scanner scanner = new Scanner(text)) {
    scanner.useDelimiter("\\.");
    assertEquals("Julia Evans was born on 25-09-1984", scanner.next());
}

Im obigen Beispiel haben wir das BeispielString als Quelle für den zu verwendenden Scanner festgelegt.

Dann setzen wir das Punktzeichen als Trennzeichen (das ansonsten als Sonderzeichen für reguläre Ausdrücke behandelt werden muss).

Schließlich wird das erste Token aus dieser begrenzten Ausgabe aktiviert.

Bei Bedarf können wir die gesamte Sammlung von Token mithilfe einerwhile-Schleife durchlaufen.

while (scanner.hasNext()) {
   // do something with the tokens returned by scanner.next()
}

8. Verwenden vonStringUtils

Die Apache Commons-Bibliotheken bieten einige nützliche Methoden zum Bearbeiten der Java-Kerntypen. Apache Commons Lang bietet eine Vielzahl von Hilfsprogrammen für die java.lang-API, insbesondere die Manipulationsmethoden vonString.

In diesem Beispiel sehen wirhow to extract a substring nested between two Strings:

assertEquals("United States of America",
  StringUtils.substringBetween(text, "(", ")"));

Es gibt eine vereinfachte Version dieser Methode für den Fall, dass der Teilstring zwischen zwei Instanzen desselbenString: verschachtelt ist

substringBetween(String str, String tag)

DiesubstringAfter-Methode derselben Klasse erhält die Teilzeichenfolge nach dem ersten Auftreten eines Trennzeichens.

Das Trennzeichen wird nicht zurückgegeben:

assertEquals("the USA (United States of America).",
  StringUtils.substringAfter(text, "living in "));

In ähnlicher Weise erhält die MethodesubstringBefore die Teilzeichenfolge vor dem ersten Auftreten eines Trennzeichens.

Das Trennzeichen wird nicht zurückgegeben:

assertEquals("Julia Evans",
  StringUtils.substringBefore(text, " was born"));

In diesem Tutorial erfahren Sie mehr über die Verarbeitung vonStringmithilfe der Apache Commons Lang-API.

9. Fazit

In diesem kurzen Artikel haben wir verschiedene Möglichkeiten gefunden, einen Teilstring aus einemString in Java zu extrahieren. Sie können unsereother tutorials aufString Manipulation in Java untersuchen.

Wie immer können Codefragmenteover on GitHub gefunden werden.