Nabavite podniz iz Stringa na Javi

1. Pregled

U ovom brzom vodiču usredotočit ćemo se na funkcionalnost podniza žica u Javi.

Uglavnom ćemo se služiti metodama iz Niz razreda i nekoliko iz Apache Commonsa StringUtils razred.

U svim sljedećim primjerima koristit ćemo ovaj jednostavni niz:

Tekst niza = "Julia Evans rođena je 25.9.1984." + "Trenutno živi u SAD-u (Sjedinjene Američke Države).";

2. Osnove podniz

Počnimo s vrlo jednostavnim primjerom ovdje - izvlačenjem podniza s indeksom početka:

assertEquals ("SAD (Sjedinjene Američke Države).", text.substring (67));

Primijetite kako smo iz našeg primjera ovdje izlučili Julijinu zemlju prebivališta.

Postoji i opcija za određivanje završnog indeksa, ali bez toga - podniz ići će sve do kraja Niz.

Učinimo to i riješimo se one dodatne točke na kraju, u gornjem primjeru:

assertEquals ("SAD (Sjedinjene Američke Države)", text.substring (67, text.length () - 1));

U gornjim primjerima koristili smo točan položaj za izdvajanje podniza.

2.1. Dobivanje podniza počevši od određenog znaka

U slučaju da je položaj potrebno dinamički izračunati na temelju znaka ili Niz možemo iskoristiti indexOf metoda:

assertEquals ("Sjedinjene Američke Države", text.substring (text.indexOf ('(') + 1, text.indexOf (')')));

Slična metoda koja nam može pomoći da lociramo svoj podniz je lastIndexOf. Iskoristimo lastIndexOf izdvojiti godinu “1984”. To je dio teksta između posljednje crtice i prve točke:

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

Oba indexOf i lastIndexOf može uzeti lik ili a Niz kao parametar. Izdvojimo tekst “USA” i ostatak teksta u zagradi:

assertEquals ("SAD (Sjedinjene Američke Države)", text.substring (text.indexOf ("USA"), text.indexOf (')') + 1));

3. Korištenje potrednost

The Niz klasa pruža drugu metodu koja se naziva potrednost koji djeluje slično kao podniz metoda.

Jedina je razlika što vraća a CharSequence umjesto a Niz i može se koristiti samo s određenim indeksom početka i kraja:

assertEquals ("SAD (Sjedinjene Američke Države)", text.subSequence (67, text.length () - 1));

4. Korištenje regularnih izraza

U pomoć će nam doći regularni izrazi ako moramo izvući podniz koji odgovara određenom uzorku.

U primjeru Niz, Julijin datum rođenja je u formatu “dd-mm-yyyy”. S ovim uzorkom možemo se podudarati pomoću API-ja Java regularnih izraza.

Prije svega, moramo stvoriti obrazac za „dd-mm-yyyy“:

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

Zatim ćemo primijeniti obrazac kako bismo pronašli podudaranje iz zadanog teksta:

Podudaranje podudaranja = pattern.matcher (tekst);

Nakon uspješne utakmice možemo izvući podudarno Niz:

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

Za više detalja o regularnim izrazima Java pogledajte ovo uputstvo.

5. Korištenje podjela

Možemo koristiti podjela metoda iz Niz klasa za izdvajanje podniza. Recimo da iz primjera želimo izdvojiti prvu rečenicu Niz. To je vrlo jednostavno za napraviti podjela:

Niz [] rečenice = text.split ("\.");

Budući da split metoda prihvaća regularni izraz, morali smo izbjeći znak razdoblja. Sada je rezultat niz od 2 rečenice.

Možemo upotrijebiti prvu rečenicu (ili iterirati kroz čitav niz):

assertEquals ("Julia Evans rođena je 25.9.1984.", rečenice [0]);

Imajte na umu da postoje bolji načini za otkrivanje rečenica i tokenizaciju pomoću Apache OpenNLP. Pogledajte ovaj vodič da biste saznali više o OpenNLP API-ju.

6. Korištenje Skener

Općenito koristimo Skener raščlaniti primitivne tipove i Žice koristeći regularne izraze. A Skener razbija svoj unos u tokene pomoću graničnika, koji se prema zadanim postavkama podudara s razmakom.

Otkrijmo kako to upotrijebiti za dobivanje prve rečenice iz primjera teksta:

probajte (Skener skenera = novi Skener (tekst)) {scanner.useDelimiter ("\."); assertEquals ("Julia Evans rođena je 25.9.1984.", scanner.next ()); }

U gornjem primjeru dali smo primjer Niz kao izvor za upotrebu skenera.

Tada postavljamo znak razgraničenja kao graničnik (koji treba izbjeći, inače će se u ovom kontekstu tretirati kao poseban regularni izraz).

Na kraju, potvrđujemo prvi žeton iz ovog odvojenog rezultata.

Ako je potrebno, možemo ponoviti kompletnu kolekciju tokena pomoću a dok petlja.

while (scanner.hasNext ()) {// učiniti nešto s tokenima koje je vratio scanner.next ()}

7. Ovisnosti Mavena

Možemo otići malo dalje i upotrijebiti korisni uslužni program - StringUtils razred - dio biblioteke Apache Commons Lang:

 org.apache.commons commons-lang3 3.8 

Najnoviju verziju ove knjižnice možete pronaći ovdje.

8. Korištenje StringUtils

Biblioteke Apache Commons dodaju neke korisne metode za manipulaciju osnovnim tipovima Java. Apache Commons Lang nudi mnoštvo pomoćnih programa za API java.lang, ponajviše Niz metode manipulacije.

U ovom primjeru ćemo vidjeti kako izvući podniz ugniježđen između dva Žice:

assertEquals ("Sjedinjene Američke Države", StringUtils.substringBetween (tekst, "(", ")"));

Postoji pojednostavljena verzija ove metode u slučaju da je podniz ugniježđen između dvije instance iste Niz:

substringBetween (String str, String tag)

The supstringAfter metoda iz iste klase dobiva podniz nakon prvog pojavljivanja separatora.

Razdjelnik se ne vraća:

assertEquals ("SAD (Sjedinjene Američke Države).", StringUtils.substringAfter (tekst, "živi u"));

Slično tome, supstringPrije metoda dobiva podniz prije prvog pojavljivanja separatora.

Razdjelnik se ne vraća:

assertEquals ("Julia Evans", StringUtils.substringBefore (tekst, "rođen je"));

Možete pogledati ovaj vodič da biste saznali više o tome Niz obrada pomoću API-ja Apache Commons Lang.

9. Zaključak

U ovom kratkom članku otkrili smo razne načine kako izvući podniz iz a Niz na Javi. Možete istražiti naše ostale vodiče na Niz manipulacija u Javi.

Kao i uvijek, isječke koda možete pronaći na GitHubu.