Získajte podreťazec z reťazca v Jave

1. Prehľad

V tomto rýchlom výučbe sa zameriame na funkčnosť podreťazca Strings v Jave.

Väčšinou použijeme metódy z String triedy a pár z Apache Commons StringUtils trieda.

Vo všetkých nasledujúcich príkladoch použijeme tento jednoduchý reťazec:

String text = "Julia Evans sa narodila 25-09-1984." + "Momentálne žije v USA (USA).";

2. Základy podreťazec

Začnime tu veľmi jednoduchým príkladom - extrakciou podreťazca s počiatočným indexom:

assertEquals ("USA (Spojené štáty americké).", text.substring (67));

Všimnite si, ako sme v tomto príklade extrahovali Juliinu krajinu pobytu.

K dispozícii je tiež možnosť určiť koncový index, ale bez toho - podreťazec pôjde až na koniec String.

Urobme to a zbavme sa tej bodky navyše na konci, v príklade vyššie:

assertEquals ("USA (Spojené štáty americké)", text.substring (67, text.length () - 1));

V príkladoch vyššie sme na extrakciu podreťazca použili presnú pozíciu.

2.1. Získanie podreťazca začínajúce od konkrétneho znaku

V prípade, že je potrebné polohu dynamicky vypočítať na základe znaku resp String môžeme využiť indexOf metóda:

assertEquals ("Spojené štáty americké", text.substring (text.indexOf ('(') + 1, text.indexOf (')'))));

Podobná metóda, ktorá nám môže pomôcť nájsť náš podreťazec, je lastIndexOf. Poďme použiť lastIndexOf extrahovať rok „1984“. Je to časť textu medzi poslednou pomlčkou a prvou bodkou:

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

Oboje indexOf a lastIndexOf môže mať charakter alebo String ako parameter. Poďme extrahovať text „USA“ a zvyšok textu v zátvorke:

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

3. Používanie podsekvencia

The String trieda poskytuje ďalšiu metódu nazvanú podsekvencia ktorý koná podobne ako podreťazec metóda.

Rozdiel je iba v tom, že vráti a CharSequence namiesto a String a dá sa použiť iba s konkrétnym začiatočným a konečným indexom:

assertEquals ("USA (Spojené štáty americké)", text.subSequence (67, text.length () - 1));

4. Používanie regulárnych výrazov

Na pomoc nám prídu regulárne výrazy ak musíme extrahovať podreťazec, ktorý sa zhoduje s konkrétnym vzorom.

V príklade Reťazec, Dátum narodenia Julie je vo formáte „dd-mm-rrrr“. Tento vzorec môžeme priradiť pomocou API pre regulárny výraz Java.

Najskôr musíme vytvoriť vzor pre „dd-mm-rrrr“:

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

Potom použijeme vzor na nájdenie zhody z daného textu:

Matcher matcher = pattern.matcher (text);

Po úspešnom zápase môžeme extrahovať uzavreté Reťazec:

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

Viac podrobností o regulárnych výrazoch Java nájdete v tomto výučbe.

5. Používanie rozdeliť

Môžeme použiť rozdeliť metóda z String triedy na extrahovanie podreťazca. Povedzme, že chceme z príkladu vyňať prvú vetu String. To je celkom ľahké pomocou rozdeliť:

Reťazec [] vety = text.split ("\.");

Pretože metóda split akceptuje regulárny výraz, museli sme pred znakom obdobia uniknúť. Výsledkom je pole dvoch viet.

Môžeme použiť prvú vetu (alebo iterovať celým poľom):

assertEquals ("Julia Evans sa narodila 25-09-1984", vety [0]);

Upozorňujeme, že pomocou Apache OpenNLP existujú lepšie spôsoby detekcie a tokenizácie viet. V tomto výučbe sa dozviete viac o rozhraní OpenNLP API.

6. Používanie Skener

Spravidla používame Skener analyzovať primitívne typy a Struny pomocou regulárnych výrazov. A Skener rozdeľuje svoj vstup na tokeny pomocou oddeľovacieho vzoru, ktorý sa štandardne zhoduje s medzerami.

Poďme zistiť, ako to využiť na získanie prvej vety z ukážkového textu:

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

Vo vyššie uvedenom príklade sme nastavili príklad String ako zdroj skenera, ktorý sa má použiť.

Potom nastavujeme znak obdobia ako oddeľovač (ktorý je potrebné ukončiť, inak sa s ním bude v tomto kontexte zaobchádzať ako so špeciálnym znakom regulárneho výrazu).

Nakoniec z tohto vymedzeného výstupu uplatníme prvý token.

V prípade potreby môžeme iterovať prostredníctvom kompletnej zbierky tokenov pomocou a zatiaľ čo slučka.

while (scanner.hasNext ()) {// urobte niečo s tokenmi vrátenými scanner.next ()}

7. Maven závislosti

Môžeme ísť trochu ďalej a použiť užitočnú utilitu - StringUtils trieda - súčasť knižnice Apache Commons Lang:

 org.apache.commons commons-lang3 3.8 

Najnovšiu verziu tejto knižnice nájdete tu.

8. Používanie StringUtils

Knižnice Apache Commons pridávajú niektoré užitočné metódy na manipuláciu so základnými typmi Java. Apache Commons Lang poskytuje celý rad pomocných nástrojov pre rozhranie java.lang API, predovšetkým String manipulačné metódy.

V tomto príklade uvidíme ako extrahovať podreťazec vnorený medzi dvoma Struny:

assertEquals ("Spojené štáty americké", StringUtils.substringB Between (text, "(", ")"));

Existuje zjednodušená verzia tejto metódy pre prípad, že je podreťazec vnorený medzi dva inštancie toho istého Reťazec:

substringB Between (String str, String tag)

The podreťazecAfter metóda z tej istej triedy získa podreťazec po prvom výskyte oddeľovača.

Oddeľovač sa nevracia:

assertEquals ("USA (Spojené štáty americké).", StringUtils.substringAfter (text, "žijúci v"));

Podobne substringPred metóda získa podreťazec pred prvým výskytom oddeľovača.

Oddeľovač sa nevracia:

assertEquals ("Julia Evans", StringUtils.substringBefore (text "sa narodila"));

Môžete sa pozrieť na tento návod, kde sa dozviete viac o String spracovanie pomocou Apache Commons Lang API.

9. Záver

V tomto rýchlom článku sme zistili rôzne spôsoby extrakcie podreťazca z a String v Jave. Môžete si prezrieť naše ďalšie návody na String manipulácia v Jave.

Útržky kódu ako vždy nájdete na GitHub.


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