Få Substring fra String i Java

1. Oversikt

I denne raske opplæringen vil vi fokusere på substringsfunksjonaliteten til Strings i Java.

Vi bruker for det meste metodene fra String klasse og få fra Apache Commons ' StringUtils klasse.

I alle de følgende eksemplene skal vi bruke denne enkle strengen:

String text = "Julia Evans was born on 25-09-1984." + "Hun bor for tiden i USA (Amerikas forente stater).";

2. Grunnleggende om underlag

La oss starte med et veldig enkelt eksempel her - trekke ut et underlag med startindeksen:

assertEquals ("USA (USA).", text.substring (67));

Legg merke til hvordan vi hentet ut Julias hjemland i vårt eksempel her.

Det er også et alternativ å spesifisere en sluttindeks, men uten det - underlag vil gå helt til slutten av String.

La oss gjøre det og bli kvitt den ekstra prikken på slutten, i eksemplet ovenfor:

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

I eksemplene ovenfor har vi brukt den nøyaktige posisjonen til å trekke ut undergrunnen.

2.1. Få en streng fra en bestemt karakter

I tilfelle posisjonen må beregnes dynamisk basert på et tegn eller String vi kan bruke oversikt over metode:

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

En lignende metode som kan hjelpe oss med å finne undergrunnen vår er lastIndexOf. La oss bruke lastIndexOf å trekke ut året “1984”. Det er delen av teksten mellom siste bindestrek og første prikk:

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

Både oversikt over og lastIndexOf kan ta et tegn eller en String som parameter. La oss trekke ut teksten “USA” og resten av teksten i parentes:

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

3. Bruke subSekvens

De String klasse gir en annen metode som kalles subSekvens som fungerer på samme måte som underlag metode.

Den eneste forskjellen er at den returnerer a CharSequence i stedet for en String og den kan bare brukes med en spesifikk start- og sluttindeks:

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

4. Bruke vanlige uttrykk

Regelmessige uttrykk vil komme oss til unnsetning hvis vi må trekke ut et underlag som samsvarer med et bestemt mønster.

I eksemplet Streng, Julias fødselsdato er i formatet “dd-mm-åååå”. Vi kan matche dette mønsteret ved hjelp av Java regulært uttrykk API.

Først og fremst må vi lage et mønster for “dd-mm-åååå”:

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

Deretter bruker vi mønsteret for å finne et samsvar fra den gitte teksten:

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

Etter en vellykket kamp kan vi trekke ut den matchede Streng:

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

For mer informasjon om Java-regulære uttrykk, sjekk ut denne veiledningen.

5. Bruke dele

Vi kan bruke dele metoden fra String klasse for å trekke ut et underlag. Si at vi vil trekke ut den første setningen fra eksemplet String. Dette er ganske enkelt å gjøre ved bruk dele:

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

Siden split-metoden godtar en regex, måtte vi unnslippe perioden. Nå er resultatet en matrise med to setninger.

Vi kan bruke første setning (eller gjenta det gjennom hele matrisen):

assertEquals ("Julia Evans ble født 25-09-1984", setninger [0]);

Vær oppmerksom på at det er bedre måter for setningsdeteksjon og tokenisering ved hjelp av Apache OpenNLP. Ta en titt på denne veiledningen for å lære mer om OpenNLP API.

6. Bruke Skanner

Vi bruker generelt Skanner å analysere primitive typer og Strenger ved å bruke vanlige uttrykk. EN Skanner bryter sine innspill i tokens ved hjelp av et skillemønster, som standard samsvarer med mellomrom.

La oss finne ut hvordan du bruker dette for å få den første setningen fra eksempelteksten:

prøv (Scanner scanner = new Scanner (text)) {scanner.useDelimiter ("\."); assertEquals ("Julia Evans ble født 25-09-1984", scanner.next ()); }

I eksemplet ovenfor har vi satt eksemplet String som kilde for skanneren å bruke.

Deretter setter vi periodetegnet som skilletegn (som må rømmes ellers blir det behandlet som det spesielle regulære uttrykkstegnet i denne sammenhengen).

Til slutt hevder vi det første token fra denne avgrensede utgangen.

Hvis det er nødvendig, kan vi gjenta gjennom hele samlingen av tokens ved hjelp av en samtidig som Løkke.

mens (scanner.hasNext ()) {// gjør noe med tokens som returneres av scanner.next ()}

7. Maven-avhengigheter

Vi kan gå litt lenger og bruke et nyttig verktøy - StringUtils klasse - en del av Apache Commons Lang-biblioteket:

 org.apache.commons commons-lang3 3.8 

Du finner den nyeste versjonen av dette biblioteket her.

8. Bruke StringUtils

Apache Commons-bibliotekene legger til noen nyttige metoder for å manipulere Java-typer. Apache Commons Lang tilbyr en rekke hjelpeprogrammer for java.lang API, spesielt String manipulasjonsmetoder.

I dette eksemplet skal vi se hvordan du trekker ut et underlag nestet mellom to Strenger:

assertEquals ("USA", StringUtils.substringBetween (tekst, "(", ")");

Det er en forenklet versjon av denne metoden i tilfelle substring er nestet mellom to tilfeller av samme Streng:

substringBetween (String str, String tag)

De substringAfter metode fra samme klasse får substring etter den første forekomsten av en separator.

Separatoren returneres ikke:

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

Tilsvarende substringFør metoden får substring før den første forekomsten av en separator.

Separatoren returneres ikke:

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

Du kan sjekke ut denne veiledningen for å finne ut mer om String behandling ved hjelp av Apache Commons Lang API.

9. Konklusjon

I denne raske artikkelen fant vi ut forskjellige måter å trekke ut et underlag fra en String i Java. Du kan utforske de andre veiledningene våre på String manipulering i Java.

Som alltid kan du finne kodebiter på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found