Få substring fra streng i Java

1. Oversigt

I denne hurtige vejledning fokuserer vi på understrengningsfunktionaliteten i Strings i Java.

Vi bruger for det meste metoderne fra Snor klasse og få fra Apache Commons ' StringUtils klasse.

I alle de følgende eksempler skal vi bruge denne enkle streng:

String text = "Julia Evans blev født den 25-09-1984." + "Hun bor i øjeblikket i USA (Amerikas Forenede Stater).";

2. Grundlæggende om underlag

Lad os starte med et meget simpelt eksempel her - udpakning af en substring med startindekset:

assertEquals ("USA (Amerikas Forenede Stater).", text.substring (67));

Bemærk hvordan vi udtrukkede Julias opholdsland i vores eksempel her.

Der er også en mulighed for at specificere et slutindeks, men uden det - underlag vil gå helt til slutningen af Snor.

Lad os gøre det og slippe af med den ekstra prik i slutningen, i eksemplet ovenfor:

assertEquals ("USA (Amerikas Forenede Stater)", text.substring (67, text.length () - 1));

I eksemplerne ovenfor har vi brugt den nøjagtige position til at udtrække understrengen.

2.1. Sådan får du en substring, der starter ved en bestemt karakter

Hvis positionen skal beregnes dynamisk ud fra et tegn eller Snor vi kan gøre brug af indeks af metode:

assertEquals ("Amerikas Forenede Stater", text.substring (text.indexOf ('(') + 1, text.indexOf (')')));

En lignende metode, der kan hjælpe os med at finde vores substring er lastIndexOf. Lad os bruge lastIndexOf at udtrække året “1984”. Dens del af teksten mellem sidste bindestreg og første prik:

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

Begge indeks af og lastIndexOf kan tage et tegn eller en Snor som en parameter. Lad os udtrække teksten "USA" og resten af ​​teksten i parentes:

assertEquals ("USA (Amerikas Forenede Stater)", text.substring (text.indexOf ("USA"), text.indexOf (')') + 1));

3. Brug subSekvens

Det Snor klasse giver en anden metode kaldet subSekvens der fungerer svarende til underlag metode.

Den eneste forskel er, at den returnerer en CharSequence i stedet for en Snor og det kan kun bruges med et specifikt start- og slutindeks:

assertEquals ("USA (Amerikas Forenede Stater)", text.subSequence (67, text.length () - 1));

4. Brug af regulære udtryk

Regelmæssige udtryk kommer til vores redning hvis vi skal udtrække et substrat, der matcher et bestemt mønster.

I eksemplet Snor, Julias fødselsdato er i formatet “dd-mm-åååå”. Vi kan matche dette mønster ved hjælp af Java regulære udtryk API.

Først og fremmest skal vi oprette et mønster til "dd-mm-åååå":

Mønster mønster = Mønster.kompil ("\ d {2} - \ d {2} - \ d {4}");

Derefter anvender vi mønsteret for at finde et match fra den givne tekst:

Matcher matcher = mønster. Matcher (tekst);

Efter en vellykket kamp kan vi udtrække det matchede Snor:

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

For flere detaljer om Java-regulære udtryk, se denne vejledning.

5. Brug dele

Vi kan bruge dele metode fra Snor klasse for at udtrække et underlag. Sig, at vi vil udtrække den første sætning fra eksemplet Snor. Dette er ret nemt at bruge dele:

Streng [] sætninger = text.split ("\.");

Da split-metoden accepterer en regex, måtte vi undslippe periodekarakteren. Nu er resultatet en matrix på 2 sætninger.

Vi kan bruge den første sætning (eller gentage det gennem hele arrayet):

assertEquals ("Julia Evans blev født den 25-09-1984", sætninger [0]);

Bemærk, at der er bedre måder til sætningsdetektering og tokenisering ved hjælp af Apache OpenNLP. Se denne vejledning for at lære mere om OpenNLP API.

6. Brug Scanner

Vi bruger generelt Scanner at analysere primitive typer og Strenge ved hjælp af regulære udtryk. EN Scanner bryder sit input i tokens ved hjælp af et skillemønster, som som standard matcher det hvide mellemrum.

Lad os finde ud af, hvordan vi bruger dette til at få den første sætning fra eksemplet på teksten:

prøv (Scannerscanner = ny scanner (tekst)) {scanner.useDelimiter ("\."); assertEquals ("Julia Evans blev født den 25-09-1984", scanner.next ()); }

I eksemplet ovenfor har vi sat eksemplet Snor som kilde til scanneren at bruge.

Derefter indstiller vi punkttegnet som afgrænser (som skal undslippes, ellers behandles det som det specielle regulære udtrykskarakter i denne sammenhæng).

Endelig hævder vi det første token fra denne afgrænsede output.

Hvis det er nødvendigt, kan vi gentage gennem den komplette samling af tokens ved hjælp af en mens løkke.

mens (scanner.hasNext ()) {// gør noget med de tokens, der returneres af scanner.next ()}

7. Maven-afhængigheder

Vi kan gå lidt længere og bruge et nyttigt værktøj - StringUtils klasse - en del af Apache Commons Lang-biblioteket:

 org.apache.commons commons-lang3 3.8 

Du kan finde den nyeste version af dette bibliotek her.

8. Brug StringUtils

Apache Commons-bibliotekerne tilføjer nogle nyttige metoder til manipulation af centrale Java-typer. Apache Commons Lang leverer et væld af hjælpeprogrammer til java.lang API, især Snor manipulationsmetoder.

I dette eksempel skal vi se hvordan man udtrækker et underlag indlejret mellem to Strenge:

assertEquals ("Amerikas Forenede Stater", StringUtils.substringBetween (tekst, "(", ")");

Der er en forenklet version af denne metode, hvis substratet er indlejret mellem to forekomster af det samme Snor:

substringBetween (String str, String tag)

Det substringAfter metode fra samme klasse får substring efter den første forekomst af en separator.

Separatoren returneres ikke:

assertEquals ("USA (Amerikas Forenede Stater).", StringUtils.substringAfter (tekst, "bor i"));

Tilsvarende er substringFør metoden får substring før den første forekomst af en separator.

Separatoren returneres ikke:

assertEquals ("Julia Evans", StringUtils.substringBefore (tekst, "blev født"));

Du kan tjekke denne vejledning for at finde ud af mere om Snor behandling ved hjælp af Apache Commons Lang API.

9. Konklusion

I denne hurtige artikel fandt vi ud af forskellige måder at udtrække en substring fra en Snor i Java. Du kan udforske vores andre tutorials på Snor manipulation i Java.

Som altid kan kodeuddrag findes på GitHub.