Converteer een tekenreeks naar hoofdletters

1. Inleiding

In deze korte tutorial laten we zien hoe je een Draad naar titel-formaat in Java.

We laten verschillende manieren zien om een ​​aangepaste methode te implementeren en we laten ook zien hoe je dit kunt doen met bibliotheken van derden.

2. Core Java-oplossingen

2.1. Itereren door de Draad Tekens

Een manier om een Draad naar hoofdletters en kleine letters is door alle tekens van de Draad.

Om dit te doen, als we een woordscheidingsteken vinden, gebruiken we een hoofdletter voor het volgende teken. Daarna veranderen we de rest van de tekens in kleine letters totdat we bij het volgende woordscheidingsteken komen.

Laten we een witruimte gebruiken als woordscheidingsteken en deze oplossing implementeren:

openbare statische String convertToTitleCaseIteratingChars (String text) {if (text == null || text.isEmpty ()) {return text; } StringBuilder geconverteerd = nieuwe StringBuilder (); boolean convertNext = true; for (char ch: text.toCharArray ()) {if (Character.isSpaceChar (ch)) {convertNext = true; } else if (convertNext) {ch = Character.toTitleCase (ch); convertNext = false; } anders {ch = Character.toLowerCase (ch); } geconverteerd.append (ch); } return geconverteerd.toString (); }

Zoals we kunnen zien, gebruiken we de methode Character.toTitleCase om de conversie te doen, sinds het controleert het titel-equivalent van een Karakter in Unicode.

Als we deze methode testen met behulp van deze invoer:

DIT IS EEN TIJD DIT IS EEN TIJD

We krijgen de volgende verwachte resultaten:

Dit is een titel. Dit is een titel

2.2. Opsplitsen in woorden

Een andere manier om dit te doen, is door het Draad in woorden, zet elk woord om in hoofdlettergebruik en voeg tenslotte alle woorden weer samen met hetzelfde woordscheidingsteken.

Laten we het in code bekijken, opnieuw de witruimte gebruiken als een woordscheidingsteken en het nuttige Stroom API:

private statische laatste String WORD_SEPARATOR = ""; openbare statische String convertToTitleCaseSplitting (String-tekst) {if (text == null || text.isEmpty ()) {retourtekst; } return Arrays .stream (text.split (WORD_SEPARATOR)) .map (woord -> word.isEmpty ()? woord: Character.toTitleCase (word.charAt (0)) + woord .substring (1) .toLowerCase ()) .collect (Collectors.joining (WORD_SEPARATOR)); }

Met dezelfde invoer als voorheen, krijgen we exact dezelfde uitvoer:

Dit is een titel. Dit is een titel

3. Apache Commons gebruiken

Als we onze eigen aangepaste methode niet willen implementeren, kunnen we de Apache Commons-bibliotheek gebruiken. De setup voor deze bibliotheek wordt in dit artikel uitgelegd.

Dit zorgt voor de WordUtils klasse, die de capitalizeFully () methode wat precies doet wat we willen bereiken:

openbare statische String convertToTileCaseWordUtilsFull (String-tekst) {return WordUtils.capitalizeFully (tekst); }

Zoals we kunnen zien, is dit heel gemakkelijk te gebruiken en als we het testen met dezelfde invoer als voorheen, krijgen we dezelfde resultaten:

Dit is een titel. Dit is een titel

Ook de WordUtils klasse biedt een ander hoofdletter () methode dat werkt op dezelfde manier als capitalizeFully (), behalve het enkel en alleen verandert het eerste teken van elk woord. Dit betekent dat de rest van de tekens niet naar kleine letters wordt geconverteerd.

Laten we eens kijken hoe we dit kunnen gebruiken:

openbare statische String convertToTileCaseWordUtils (String-tekst) {return WordUtils.capitalize (tekst); }

Als we het nu testen met dezelfde inputs als hiervoor, krijgen we deze verschillende outputs:

DIT IS EEN TITEL DIT IS EEN TITEL

4. ICU4J gebruiken

Een andere bibliotheek die we kunnen gebruiken is ICU4J, die ondersteuning biedt voor Unicode en globalisering.

Om het te gebruiken, moeten we deze afhankelijkheid aan ons project toevoegen:

 com.ibm.icu icu4j 61.1 

De laatste versie vind je hier.

Deze bibliotheek werkt op een vergelijkbare manier als WordUtils, maar we kunnen een BreakIterator om de methode te vertellen hoe we de Draad, en daarom welke woorden we willen converteren naar hoofdlettergebruik:

openbare statische String convertToTitleCaseIcu4j (String-tekst) {if (text == null || text.isEmpty ()) {retourtekst; } retourneer UCharacter.toTitleCase (tekst, BreakIterator.getTitleInstance ()); }

Zoals we kunnen zien, hebben ze een specifiek BreakIterator om met titels te werken. Als we er geen specificeren BreakIterator het gebruikt de standaardinstellingen van Unicode, die in dit geval dezelfde resultaten opleveren.

Merk ook op dat we met deze methode de Locale van de Draad we zijn aan het converteren om een ​​locale-specifieke conversie uit te voeren.

5. Conclusie

In dit korte artikel hebben we laten zien hoe u een Draad naar titel-formaat in Java. We hebben eerst onze aangepaste implementaties gebruikt en daarna hebben we laten zien hoe u dit kunt doen met externe bibliotheken.

Zoals altijd is de volledige broncode van de voorbeelden beschikbaar op GitHub.