Konverter en streng til tittelsak

1. Introduksjon

I denne korte opplæringen viser vi hvordan du konverterer en String til tittelsakformat i Java.

Vi viser forskjellige måter å implementere en tilpasset metode på, og vi viser også hvordan du gjør det ved hjelp av tredjepartsbiblioteker.

2. Core Java-løsninger

2.1. Iterere gjennom String Tegn

En måte å konvertere en String til tittelsaken er ved å iterere gjennom alle tegnene i String.

For å gjøre det, når vi finner en ordskiller, kapitaliserer vi neste tegn. Etter det endrer vi resten av tegnene til små bokstaver til vi når neste ordskiller.

La oss bruke et hvitt mellomrom som ordskiller og implementere denne løsningen:

offentlig statisk streng convertToTitleCaseIteratingChars (strengtekst) {if (text == null || text.isEmpty ()) {returtekst; } StringBuilder konvertert = ny StringBuilder (); boolsk convertNext = true; for (char ch: text.toCharArray ()) {if (Character.isSpaceChar (ch)) {convertNext = true; } annet hvis (convertNext) {ch = Character.toTitleCase (ch); convertNext = false; } annet {ch = Character.toLowerCase (ch); } konvertert. vedlegg (ch); } returner convert.toString (); }

Som vi ser, bruker vi metoden Character.toTitleCase å gjøre konverteringen, siden den sjekker tittelen saken tilsvarer en Karakter i Unicode.

Hvis vi tester denne metoden ved hjelp av disse inngangene:

Dette er en TITT Dette er en TID

Vi får følgende forventede utganger:

Dette er en tittel Dette er en tittel

2.2. Splitting in Words

En annen tilnærming for å gjøre dette er å splitte String til ord, konverter hvert ord til tittelbokstav, og slutt til slutt alle ordene igjen ved hjelp av den samme ordskilleren.

La oss se det i kode, og bruke det hvite rommet igjen som en ordskiller, og det nyttige Strøm API:

privat statisk sluttstreng WORD_SEPARATOR = ""; offentlig statisk String convertToTitleCaseSplitting (Stringtekst) {if (text == null || text.isEmpty ()) {returtekst; } returnere matriser .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 å bruke de samme inngangene som før, får vi nøyaktig de samme utgangene:

Dette er en tittel Dette er en tittel

3. Bruke Apache Commons

Hvis vi ikke vil implementere vår egen tilpassede metode, kan vi bruke Apache Commons-biblioteket. Oppsettet for dette biblioteket er forklart i denne artikkelen.

Dette gir de WordUtils klasse, som har capitalizeFully () metode som gjør akkurat det vi ønsker å oppnå:

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

Som vi kan se er dette veldig enkelt å bruke, og hvis vi tester det med de samme inngangene som før, får vi de samme resultatene:

Dette er en tittel Dette er en tittel

Også, den WordUtils klasse gir en annen kapitaliser () metode som fungerer på samme måte som capitalizeFully (), bortsett fra det kun endrer det første tegnet i hvert ord. Dette betyr at den ikke konverterer resten av tegnene til små bokstaver.

La oss se hvordan vi kan bruke dette:

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

Nå, hvis vi tester det med de samme inngangene som før, får vi disse forskjellige utgangene:

Dette er en tittel Dette er en tittel

4. Bruke ICU4J

Et annet bibliotek vi kan bruke er ICU4J, som gir Unicode og globaliseringsstøtte.

For å bruke det må vi legge til denne avhengigheten til prosjektet vårt:

 com.ibm.icu icu4j 61.1 

Den siste versjonen finner du her.

Dette biblioteket fungerer på en veldig lignende måte som WordUtils, men vi kan spesifisere en BreakIterator å fortelle metoden hvordan vi vil dele opp String, og derfor hvilke ord vi vil konvertere til tittel:

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

Som vi kan se, har de en spesifikk BreakIterator å jobbe med titler. Hvis vi ikke spesifiserer noen BreakIterator den bruker standardinnstillingene fra Unicode, som i dette tilfellet genererer de samme resultatene.

Legg også merke til at denne metoden lar oss spesifisere Lokal av String vi konverterer for å gjøre en lokal spesifikk konvertering.

5. Konklusjon

I denne korte artikkelen har vi vist hvordan du konverterer en String til tittelsakformat i Java. Vi har brukt våre tilpassede implementeringer først, og etter det har vi vist hvordan du gjør det ved hjelp av eksterne biblioteker.

Som alltid er hele kildekoden til eksemplene tilgjengelig på GitHub.


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