Konverter en streng til titelsag

1. Introduktion

I denne korte vejledning viser vi, hvordan man konverterer en Snor til titelsagformat i Java.

Vi viser forskellige måder at implementere en brugerdefineret metode på, og vi viser også, hvordan man gør det ved hjælp af tredjepartsbiblioteker.

2. Core Java-løsninger

2.1. Itererer gennem Snor Tegn

En måde at konvertere en Snor til titel sag er ved at gentage gennem alle tegn i Snor.

For at gøre det, når vi finder en ordseparator, kapitaliserer vi det næste tegn. Derefter ændrer vi resten af ​​tegnene til små bogstaver, indtil vi når det næste ord adskiller.

Lad os bruge et hvidt mellemrum som en ordseparator og implementere denne løsning:

offentlig statisk String convertToTitleCaseIteratingChars (String text) {if (text == null || text.isEmpty ()) {return text; } Konverteret StringBuilder = ny StringBuilder (); boolsk convertNext = sand; for (char ch: text.toCharArray ()) {if (Character.isSpaceChar (ch)) {convertNext = true; } ellers hvis (convertNext) {ch = Character.toTitleCase (ch); convertNext = false; } andet {ch = Character.toLowerCase (ch); } konverteret. tilføj (ch); } returner konverteret.toString (); }

Som vi kan se, bruger vi metoden Character.toTitleCase at gøre konverteringen, siden det kontrollerer titelsagen svarende til en Karakter i Unicode.

Hvis vi tester denne metode ved hjælp af disse indgange:

dette er en tiTel dette er en tid

Vi får følgende forventede output:

Dette er en titel Dette er en titel

2.2. Opdeling af ord

En anden tilgang til at gøre dette er at opdele Snor til ord, konvertere hvert ord til titelsag, og slut til slut med alle ordene igen ved hjælp af den samme ordseparator.

Lad os se det i kode ved at bruge det hvide mellemrum igen som en ordseparator og det nyttige Strøm API:

privat statisk endelig streng WORD_SEPARATOR = ""; public static String convertToTitleCaseSplitting (String text) {if (text == null || text.isEmpty ()) {return text; } returnere arrays .stream (text.split (WORD_SEPARATOR)) .map (word -> word.isEmpty ()? word: Character.toTitleCase (word.charAt (0)) + word .substring (1) .toLowerCase ()) .collect (Collectors.joining (WORD_SEPARATOR)); }

Ved at bruge de samme indgange som før får vi nøjagtigt de samme udgange:

Dette er en titel Dette er en titel

3. Brug af Apache Commons

Hvis vi ikke ønsker at implementere vores egen brugerdefinerede metode, kan vi bruge Apache Commons-biblioteket. Opsætningen til dette bibliotek er forklaret i denne artikel.

Dette giver det WordUtils klasse, der har kapitalisereFuldt () metode der gør nøjagtigt det, vi ønsker at opnå:

offentlig statisk String convertToTileCaseWordUtilsFull (String text) {return WordUtils.capitalizeFully (text); }

Som vi kan se, er dette meget let at bruge, og hvis vi tester det med de samme input som før, får vi de samme resultater:

Dette er en titel Dette er en titel

Også den WordUtils klasse giver en anden kapitaliser () metode det fungerer på samme måde som capitalizeFully (), undtagen det kun ændrer det første tegn i hvert ord. Dette betyder, at det ikke konverterer resten af ​​tegnene til små bogstaver.

Lad os se, hvordan vi kan bruge dette:

offentlig statisk String convertToTileCaseWordUtils (String text) {return WordUtils.capitalize (text); }

Nu, hvis vi tester det med de samme indgange som før, får vi disse forskellige udgange:

DETTE ER EN TITEL Dette er EN TID

4. Brug af ICU4J

Et andet bibliotek, som vi kan bruge, er ICU4J, som leverer Unicode og globaliseringsstøtte.

For at bruge det skal vi tilføje denne afhængighed til vores projekt:

 com.ibm.icu icu4j 61.1 

Den seneste version kan findes her.

Dette bibliotek fungerer på en meget lignende måde som WordUtils, men vi kan angive en BreakIterator at fortælle metoden, hvordan vi vil opdele Snor, og derfor hvilke ord vi vil konvertere til titelsag:

offentlig statisk streng convertToTitleCaseIcu4j (strengtekst) {if (text == null || text.isEmpty ()) {returtekst; } returner UCharacter.toTitleCase (tekst, BreakIterator.getTitleInstance ()); }

Som vi kan se, har de et specifikt BreakIterator at arbejde med titler. Hvis vi ikke angiver nogen BreakIterator det bruger standardindstillingerne fra Unicode, som i dette tilfælde genererer de samme resultater.

Bemærk også, at denne metode lader os specificere Lokal af Snor vi konverterer for at udføre en lokalspecifik konvertering.

5. Konklusion

I denne korte artikel har vi vist, hvordan man konverterer en Snor til titelsagformat i Java. Vi har brugt vores brugerdefinerede implementeringer først, og derefter har vi vist, hvordan man gør det ved hjælp af eksterne biblioteker.

Som altid er den fulde kildekode for eksemplerne tilgængelig på GitHub.