Come convertire Char in String in Java (Esempi)
⚡ Riepilogo intelligente
Conversione di un carattere in una stringa in Java Richiede una singola chiamata a String.valueOf(myChar) o Character.toString(myChar). Muovendosi nella direzione inversa si utilizza charAt(index), che estrae un carattere da una stringa in base alla sua posizione.
In questo tutorial, studieremo due brevi programmi che spostano un valore tra le due modalità Java testo del negozio:
- Convertire un carattere in una stringa
- Convertire una stringa in un carattere
I due tipi non sono intercambiabili. Un char è un tipo primitivo che contiene esattamente un'unità di codice UTF-16 a 16 bit, scritta tra virgolette singole come 'g'. Una stringa è un oggetto che contiene una sequenza di tali unità di codice, scritte tra virgolette doppie come "Guru99”. Poiché uno è un tipo primitivo e l'altro un oggetto, nessun cast può collegarli: un metodo di libreria deve fare il lavoro e Java ne fornisce uno per ogni direzione.
Converti carattere in stringa
Esistono diversi modi per convertire un carattere in una stringa in Java. internamente a Java String memorizza il suo testo come un array di unità di codice, motivo per cui un singolo char si inserisce così facilmente in una di esse. Un char è un tipo di dati senza segno a 16 bit, largo due byte, che può contenere valori da 0 a 65,535.
Possiamo convertire un carattere in una stringa utilizzando due metodi: il metodo statico toString() della classe Character e il metodo statico valueOf() della classe String. Entrambi restituiscono una nuova stringa di un solo carattere e i due programmi seguenti stampano lo stesso risultato.
Metodo 1: utilizzo del metodo toString()
Il programma seguente memorizza la lettera g in un variabile carattere e lo passa a Character.toString(), che restituisce quel singolo carattere come stringa. Il codice è modificabile, quindi cambia la lettera ed eseguilo di nuovo per vedere l'output corrispondente.
public class CharToString_toString {
public static void main(String[] args) {
//input character variable
char myChar = 'g';
//Using toString() method
//toString method take character parameter and convert string.
String myStr = Character.toString(myChar);
//print string value
System.out.println("String is: " + myStr);
}
}
Risultato previsto:
String is: g
Metodo 2: utilizzo del metodo valueOf()
Il secondo programma sostituisce String.valueOf(myChar) e non cambia nient'altro. Poiché Java 9 Le due chiamate sono la stessa operazione: Character.toString(char) è implementato come una chiamata a String.valueOf(char), quindi nessuna delle due è misurabilmente più veloce dell'altra.
public class CharToString_valueOf {
public static void main(String[] args) {
char myChar = 'g';
//valueOf method take character parameter and convert string.
String myStr = String.valueOf(myChar);
////print string value
System.out.println("String is: " + myStr);
}
}
Risultato previsto:
String is: g
Altri modi per convertire un carattere in una stringa
Altri quattro metodi alternativi compaiono in codici più datati e nelle domande dei colloqui di lavoro. Funzionano tutti, ma nessuno di essi è altrettanto chiaro e intuitivo come i due metodi precedenti, e due di essi allocano più memoria del necessario.
public class CharToStringMore { public static void main(String[] args) { char myChar = 'g'; // 1. concatenation with an empty literal String byConcat = myChar + ""; // 2. the Character wrapper instance method String byWrapper = Character.valueOf(myChar).toString(); // 3. a one-element array of code units String byArray = new String(new char[]{myChar}); // 4. the format() helper with the %c conversion String byFormat = String.format("%c", myChar); System.out.println(byConcat + byWrapper + byArray + byFormat); } }
Uscita prevista:
gggg
La tabella indica quando conviene utilizzare ciascun percorso.
| Metodo | Esempio | Note |
|---|---|---|
| Stringa valoreDi(carattere) | Stringa valoreDi(myChar) | Consigliato. Una sola chiamata, nessun oggetto aggiuntivo oltre alla stringa restituita. |
| Character.toString(char) | Character.toString(myChar) | Ugualmente buono. Disponibile da Java 1.4 e delega a String.valueOf da quando Java 9. |
| Concatenazione | myChar + “” | Funziona e su Java Dalla versione 9 in poi, la compilazione avviene tramite una chiamata a invokedynamic anziché a StringBuilder, quindi il vecchio avviso di lentezza non è più valido. L'intento, tuttavia, rimane celato. |
| Wrapper di caratteri | Character.valueOf(myChar).toString() | Boxes il carattere prima. Usa Character.valueOf, non il nuovo costruttore Character(char), che è stato deprecato per la rimozione da Java 9. |
| array di caratteri | nuova Stringa(nuovo char[]{myChar}) | Alloca un array e lo copia. Riservatelo al caso in cui abbiate già un array di caratteri. |
| Formato stringa | String.format(“%c”, myChar) | Di gran lunga il più lento, perché la stringa di formato viene analizzata in fase di esecuzione. Utile solo quando il carattere fa parte di un modello più ampio. |
Dopo aver esaminato entrambe le direzioni della conversione a singolo carattere, passiamo all'operazione inversa.
Converti stringa in carattere
Possiamo convertire una Stringa in char utilizzando il metodo charAt() della classe String. Il metodo prende un indice basato su zero e restituisce il char che si trova in quella posizione, quindi leggere ogni carattere significa gabinettoping Da 0 a length() meno uno. Richiedere un indice inferiore a 0 o pari o superiore a length() genera un'eccezione StringIndexOutOfBoundsException.
Il programma seguente percorre la stringa Guru99 una posizione alla volta e stampa ogni carattere con il suo indice.
//Convert String to Character using string method
package com.guru99;
public class StringToChar {
public static void main(String[] args)
{
//input String
String myStr = "Guru99";
//find string length using length method.
int stringLength =myStr.length();
//for loop start 0 to total length
for(int i=0; i < stringLength;i++)
{
//chatAt method find Position and convert to character.
char myChar = myStr.charAt(i);
//print string to character
System.out.println("Character at "+i+" Position: "+myChar);
}
}
}
Uscita prevista:
Character at 0 Position: G Character at 1 Position: u Character at 2 Position: r Character at 3 Position: u Character at 4 Position: 9 Character at 5 Position: 9
Si noti che una stringa non può essere semplicemente convertita: `char c = (char) myStr;` non viene compilato, perché una stringa è un oggetto e un `char` è un tipo primitivo. Per una stringa che sa già contenere esattamente un carattere, `charAt(0)` è la risposta completa.
Convertire una stringa in un array di caratteri e viceversa.
Quando ogni carattere è necessario contemporaneamente anziché un indice alla volta, toCharArray() restituisce una nuova matrice di carboneLa trasformazione di quell'array in testo è compito del costruttore String(char[]) o di String.valueOf(char[]), ed entrambi copiano l'array in modo difensivo, in modo che le successive modifiche all'array non alterino la stringa.
public class StringCharArray { public static void main(String[] args) { String myStr = "Guru99"; // the text split into its array of code units char[] chars = myStr.toCharArray(); System.out.println(chars.length); System.out.println(chars[0]); // the array turned back into text System.out.println(new String(chars)); System.out.println(String.valueOf(chars)); // one range copied into an array you already own char[] part = new char[4]; myStr.getChars(0, 4, part, 0); System.out.println(new String(part)); } }
Uscita prevista:
6 G Guru99 Guru99 Guru
Un quarto metodo, getChars(srcBegin, srcEnd, dst, dstBegin), copia un intervallo in un array già di tua proprietà invece di allocarne uno nuovo. L'indice finale è esclusivo, motivo per cui getChars(0, 4, part, 0) restituisce Guru anziché Guru9. Limiti fuori intervallo generano un'eccezione IndexOutOfBoundsException.
I tre approcci differiscono principalmente per ciò che assegnano, come riassunto di seguito.
| Task | Bando | Ciò che assegna |
|---|---|---|
| Da stringa ad array di caratteri | myStr.toCharArray() | Un nuovo array; sicuro su una stringa vuota, nel qual caso restituisce un array di lunghezza zero. |
| array di caratteri in stringa | nuova Stringa(caratteri) o Stringa.valoreDi(caratteri) | Una nuova stringa più una copia interna dell'array. |
| Integrare in un array esistente | myStr.getChars(0, 4, parte, 0) | Niente di nuovo; scrive nell'array che gli viene fornito. |
Errori comuni durante la conversione di char e stringhe in Java
La maggior parte dei problemi in queste conversioni deriva da sei errori ricorrenti, piuttosto che dai metodi stessi. La tabella elenca ciascun errore e la relativa soluzione.
| Problema | Causare | Fissare |
|---|---|---|
| tipi incompatibili: String non può essere convertito in char | Un tentativo di conversione, ad esempio char c = (char) myStr; | Chiama invece myStr.charAt(0). Non esiste un cast tra un oggetto e un tipo primitivo. |
| StringIndexOutOfBoundsException | charAt() chiamato con un indice negativo o con length() su una stringa vuota | Proteggere con isEmpty() o confrontare l'indice con length() prima di leggere. |
| String.valueOf(null) genera NullPointerException | Il valore nullo non modificato corrisponde all'overload char[], che è quello più specifico. | Scrivi String.valueOf((Object) null) quando il testo letterale null è quello che desideri. |
| Character.toString(65) restituisce A, non 65 | Java 11 ha aggiunto un overload di Character.toString(int) che legge il suo argomento come un punto di codice Unicode | Utilizzare String.valueOf(65) o Integer.toString(65) per le cifre 65. |
| Un'emoji viene visualizzata come due simboli incomprensibili | I caratteri sopra U+FFFF occupano due caratteri, un surrogato alto seguito da un surrogato basso | Leggi il valore con codePointAt(0), quindi ricostruiscilo con Character.toString(codePoint) su Java 11 e successive. |
| Avviso di deprecazione sul nuovo personaggio (myChar) | Il costruttore Character(char) è stato deprecato dal Java 9 e contrassegnato per la rimozione | Utilizza Character.valueOf(myChar) oppure lascia che l'autoboxing fornisca il wrapper. |
La stessa classe String supporta numerosi esercizi correlati: invertire una stringa con la ricorsione, confronto di due stringhee stampa dell'output formattato.
