Holen Sie sich Teilzeichenfolge von String in Java

1. Übersicht

In diesem kurzen Tutorial konzentrieren wir uns auf die Teilzeichenfolgenfunktionalität von Strings in Java.

Wir werden hauptsächlich die Methoden aus der String- Klasse und einige aus der StringUtils- Klasse von Apache Commons verwenden .

In allen folgenden Beispielen verwenden wir diesen einfachen String:

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

2. Grundlagen der Teilzeichenfolge

Beginnen wir hier mit einem sehr einfachen Beispiel - dem Extrahieren eines Teilstrings mit dem Startindex:

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

Beachten Sie, wie wir in unserem Beispiel hier Julias Wohnsitzland extrahiert haben.

Es gibt auch eine Option, um einen Endindex anzugeben , aber ohne diesen wird der Teilstring bis zum Ende des Strings reichen .

Lassen Sie uns das tun und diesen zusätzlichen Punkt am Ende im obigen Beispiel entfernen:

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.

2.1. Erhalten eines Teilstrings ab einem bestimmten Zeichen

Für den Fall , muss die Position dynamisch auf ein Zeichen oder basierend berechnet werden String wir von der machen kann indexOf - Methode:

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

Eine ähnliche Methode, die uns beim Auffinden unserer Teilzeichenfolge helfen kann, ist lastIndexOf . Verwenden wir lastIndexOf , um das Jahr „1984“ zu extrahieren. Es ist der Textteil zwischen dem letzten Bindestrich und dem ersten Punkt:

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

Sowohl indexOf als auch lastIndexOf können ein Zeichen oder einen String 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));

3. Verwenden von SubSequence

Die String- Klasse bietet eine andere Methode namens subSequence, die sich ähnlich wie die Teilstring- Methode verhält .

Der einzige Unterschied ist , dass es einen gibt CharSequence anstelle einem String und kann nur mit einer bestimmten Start- und End-Index verwendet werden:

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

4. Verwenden regulärer Ausdrücke

Reguläre Ausdrücke helfen uns, wenn wir einen Teilstring extrahieren müssen, der einem bestimmten Muster entspricht.

In der Beispielzeichenfolge hat Julias Geburtsdatum das Format „TT-MM-JJJJ“. Wir können dieses Muster mithilfe 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}");

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

Matcher matcher = pattern.matcher(text);

Nach einer erfolgreichen Übereinstimmung können wir die übereinstimmende Zeichenfolge extrahieren :

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

Weitere Informationen zu den regulären Java-Ausdrücken finden Sie in diesem Lernprogramm.

5. Split verwenden

Wir können die split- Methode aus der String- Klasse verwenden, um einen Teilstring zu extrahieren. Angenommen, wir möchten den ersten Satz aus dem Beispielstring extrahieren . Dies ist mit split ganz einfach :

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

Since the split method accepts a regex we had to escape the period character. Now the result is an array of 2 sentences.

We can use the first sentence (or iterate through the whole array):

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

Please note that there are better ways for sentence detection and tokenization using Apache OpenNLP. Check out this tutorial to learn more about the OpenNLP API.

6. Using Scanner

We generally use Scanner to parse primitive types and Strings using regular expressions. A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace.

Let's find out how to use this to get the first sentence from the example text:

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

In the above example, we have set the example String as the source for the scanner to use.

Then we are setting the period character as the delimiter (which needs to be escaped otherwise it will be treated as the special regular expression character in this context).

Finally, we assert the first token from this delimited output.

If required, we can iterate through the complete collection of tokens using a while loop.

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

7. Maven Dependencies

We can go a bit further and use a useful utility – the StringUtils class – part of the Apache Commons Lang library:

 org.apache.commons commons-lang3 3.8 

You can find the latest version of this library here.

8. Using StringUtils

The Apache Commons libraries add some useful methods for manipulating core Java types. Apache Commons Lang provides a host of helper utilities for the java.lang API, most notably String manipulation methods.

In this example, we're going to see how to extract a substring nested between two Strings:

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

There is a simplified version of this method in case the substring is nested in between two instances of the same String:

substringBetween(String str, String tag)

The substringAfter method from the same class gets the substring after the first occurrence of a separator.

The separator isn't returned:

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

Similarly, the substringBefore method gets the substring before the first occurrence of a separator.

The separator isn't returned:

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

Sie können dieses Tutorial überprüfen um mehr zu erfahren über String Verarbeitung Apache Commons Lang - API.

9. Fazit

In diesem kurzen Artikel haben wir verschiedene Möglichkeiten zum Extrahieren eines Teilstrings aus einem String in Java herausgefunden. Sie können unsere anderen Tutorials zur String- Manipulation in Java lesen.

Wie immer finden Sie Code-Schnipsel auf GitHub.