Converti una stringa in maiuscolo / minuscolo

1. Introduzione

In questo breve tutorial, mostreremo come convertire una stringa in formato maiuscolo / minuscolo in Java.

Mostreremo diversi modi per implementare un metodo personalizzato e mostreremo anche come farlo utilizzando librerie di terze parti.

2. Soluzioni Java principali

2.1. Iterazione attraverso i caratteri stringa

Un modo per convertire una stringa in maiuscolo e minuscolo è scorrere tutti i caratteri della stringa .

Per farlo, quando troviamo un separatore di parole, mettiamo in maiuscolo il carattere successivo. Dopodiché, cambiamo il resto dei caratteri in minuscolo fino a raggiungere il separatore di parole successivo.

Usiamo uno spazio bianco come separatore di parole e implementiamo questa soluzione:

public static String convertToTitleCaseIteratingChars(String text) { if (text == null || text.isEmpty()) { return text; } StringBuilder converted = new StringBuilder(); boolean convertNext = true; for (char ch : text.toCharArray()) { if (Character.isSpaceChar(ch)) { convertNext = true; } else if (convertNext) { ch = Character.toTitleCase(ch); convertNext = false; } else { ch = Character.toLowerCase(ch); } converted.append(ch); } return converted.toString(); }

Come possiamo vedere, utilizziamo il metodo Character.toTitleCase per eseguire la conversione, poiché controlla l'equivalente in maiuscolo e minuscolo del titolo di un carattere in Unicode.

Se testiamo questo metodo utilizzando questi input:

tHis IS a tiTLe tHis, IS a tiTLe

Otteniamo i seguenti output attesi:

This Is A Title This, Is A Title

2.2. Dividere in parole

Un altro approccio per farlo è dividere la stringa in parole, convertire ogni parola in maiuscolo e infine unire di nuovo tutte le parole usando lo stesso separatore di parole.

Vediamolo nel codice, utilizzando di nuovo lo spazio bianco come separatore di parole e l'utile Stream API:

private static final String WORD_SEPARATOR = " "; public static String convertToTitleCaseSplitting(String text) { if (text == null || text.isEmpty()) { return text; } return 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)); }

Usando gli stessi input di prima, otteniamo esattamente gli stessi output:

This Is A Title This, Is A Title

3. Utilizzo di Apache Commons

Nel caso in cui non vogliamo implementare il nostro metodo personalizzato, possiamo utilizzare la libreria Apache Commons. La configurazione per questa libreria è spiegata in questo articolo.

Questo fornisce la classe WordUtils , che ha il metodo capitalizeFully () che fa esattamente ciò che vogliamo ottenere:

public static String convertToTileCaseWordUtilsFull(String text) { return WordUtils.capitalizeFully(text); }

Come possiamo vedere, questo è molto facile da usare e se lo testiamo con gli stessi input di prima otteniamo gli stessi risultati:

This Is A Title This, Is A Title

Inoltre, la classe WordUtils fornisce un altro metodo capitalize () che funziona in modo simile a capitalizeFully (), tranne per il fatto che cambia solo il primo carattere di ogni parola . Ciò significa che non converte il resto dei caratteri in minuscolo.

Vediamo come possiamo usarlo:

public static String convertToTileCaseWordUtils(String text) { return WordUtils.capitalize(text); }

Ora, se lo testiamo con gli stessi input di prima, otteniamo questi output diversi:

THis IS A TiTLe THis, IS A TiTLe

4. Utilizzo di ICU4J

Un'altra libreria che possiamo usare è ICU4J, che fornisce supporto per Unicode e globalizzazione.

Per usarlo dobbiamo aggiungere questa dipendenza al nostro progetto:

 com.ibm.icu icu4j 61.1 

L'ultima versione può essere trovata qui.

Questa libreria funziona in modo molto simile a WordUtils , ma possiamo specificare un BreakIterator per dire al metodo come vogliamo dividere la stringa , e quindi quali parole vogliamo convertire in maiuscole / minuscole:

public static String convertToTitleCaseIcu4j(String text) { if (text == null || text.isEmpty()) { return text; } return UCharacter.toTitleCase(text, BreakIterator.getTitleInstance()); }

Come possiamo vedere, hanno un BreakIterator specifico per lavorare con i titoli. Se non specifichiamo alcun BreakIterator , utilizza i valori di default di Unicode , che in questo caso generano gli stessi risultati.

Inoltre, si noti che questo metodo ci consente di specificare le impostazioni internazionali della stringa che stiamo convertendo per eseguire una conversione specifica della locale.

5. conclusione

In questo breve articolo, abbiamo mostrato come convertire una stringa in formato maiuscolo / minuscolo in Java. Abbiamo usato prima le nostre implementazioni personalizzate e successivamente abbiamo mostrato come farlo usando librerie esterne.

Come sempre, il codice sorgente completo degli esempi è disponibile su GitHub.