Java >> Java tutorial >  >> Tag >> String

Opdel kun en streng ved den første forekomst af skilletegn

1. Oversigt

I denne øvelse lærer vi, hvordan man deler en Java streng kun ved den første forekomst af en afgrænsning ved hjælp af to tilgange.

2. Problemformulering

Lad os sige, at vi har en tekstfil med hver linje som en streng, der består af to dele – den venstre del indikerer en persons navn og den højre del indikerer deres hilsen:

Roberto "I wish you a bug-free day!"
Daniele "Have a great day!"
Jonas "Good bye!"

Efterfølgende ønsker vi at få personens navn fra hver linje.

Vi kan se, at begge dele er adskilt af et ” ” (mellemrum), ligesom de andre ord i højre del. Så vores afgrænsning bliver mellemrumstegnet.

3. Brug af split() Metode

split() instansmetode fra strengen klasse opdeler strengen baseret på det angivne regulære udtryk. Desuden kan vi bruge en af ​​dens overbelastede varianter til at få den nødvendige første forekomst.

Vi kan give en grænse som en parameter til split() metode til at angive det antal gange, vi ønsker at anvende mønsteret og dermed det maksimale antal tokens i det resulterende array. For eksempel, hvis vi sætter grænsen som n (n>0), betyder det, at mønsteret højst vil blive anvendt n-1  gange.

Her vil vi bruge mellemrum (” “) som et regulært udtryk til at opdele strengen ved den første forekomst af plads.

Som et resultat kan vi tokenisere hver linje i to dele ved hjælp af den overbelastede split() metode:

public String getFirstWordUsingSplit(String input) {
    String[] tokens = input.split(" ", 2);
    return tokens[0];
}

Så hvis vi sender den første linje fra vores eksempel som input til denne metode, vil den returnere "Roberto".

Men hvis input String kun har ét ord eller ikke har mellemrum i sig, vil ovenstående metode simpelthen returnere den samme streng .

Lad os teste dette af:

assertEquals("Roberto", getFirstWordUsingSplit("Roberto \"I wish you a bug-free day\""));
assertEquals("StringWithNoSpace", getFirstWordUsingSplit("StringWithNoSpace"));

4. Brug af understreng() Metode

understrengen() metoden for strengen  klasse returnerer understrengen af ​​en streng. Det er en overbelastet metode, hvor en af ​​de overbelastede versioner accepterer indekset og returnerer alle tegnene i strengen indtil det givne indeks.

Lad os kombinere substring() og indexOf() at løse det samme problem.

For det første får vi indekset for det første mellemrumstegn. Derefter får vi understrengen indtil dette indeks, som vil være vores resultat, personens navn:

public String getFirstWordUsingSubString(String input) {
    return input.substring(0, input.indexOf(" "));
}

Hvis vi sender det samme input String som før vil vores metode returnere strengen "Roberto".

Men hvis input String ikke indeholder mellemrum, så vil denne metode kaste StringIndexOutOfBoundsException . Hvis et match ikke findes, vises indexOf()  metode returnerer -1.

For at undgå denne undtagelse kan vi ændre metoden ovenfor:

public String getFirstWordUsingSubString(String input) {
    int index = input.contains(" ") ? input.indexOf(" ") : 0;
    return input.substring(0, index);
}

Hvis vi nu sender en streng uden plads til denne metode får vi en tom streng til gengæld.

Lad os teste dette af:

assertEquals("Roberto", getFirstWordUsingSubString("Roberto \"I wish you a bug-free day\""));
assertEquals("", getFirstWordUsingSubString("StringWithNoSpace"));

5. Konklusion

I denne artikel har vi set to metoder til at opdele en streng kun ved den første forekomst af et skilletegn i Java.

Som altid er koden tilgængelig på GitHub.


Java tag