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.

  • 🔘 Stringa.ValoreDi: String.valueOf(myChar) restituisce una stringa di un solo carattere e indica in modo chiaro lo scopo della conversione.
  • ☑️ Character.toString: Character.toString(myChar) svolge lo stesso lavoro e, poiché Java 9, semplicemente delega a String.valueOf.
  • charAt: charAt(index) restituisce il carattere in posizione basata su zero e genera StringIndexOutOfBoundsException se si trova al di fuori dell'intervallo valido.
  • 🧪 array di caratteri: Il metodo toCharArray() suddivide una stringa in un array di caratteri, e il metodo new String(chars) ricostruisce il testo a partire da tale array.
  • Nessun casting: Una stringa non può mai essere convertita in un carattere, perché una stringa è un oggetto e non un tipo primitivo correlato.
  • ???? Limite Unicode: Un carattere contiene un'unità di codice UTF-16 a 16 bit, quindi un'emoji richiede due caratteri o Character.toString(codePoint).

Java codice che converte un carattere in una stringa e una stringa di nuovo in un carattere

In questo tutorial, studieremo due brevi programmi che spostano un valore tra le due modalità Java testo del negozio:

  1. Convertire un carattere in una stringa
  2. 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.

DOMANDE FREQUENTI

Un char è un tipo primitivo che contiene un'unità di codice UTF-16 a 16 bit, racchiusa tra virgolette singole. Una stringa è un oggetto che contiene una sequenza di queste unità, racchiuse tra virgolette doppie, e possiede metodi come length() e charAt() che un tipo primitivo non può avere.

No. Da allora Java 9. Character.toString(char) è implementato come una chiamata a String.valueOf(char), quindi entrambi eseguono lo stesso codice. Scegli quello che ti sembra più leggibile nel contesto in cui lavori; String.format("%c", c) è l'unica soluzione effettivamente lenta.

Un carattere memorizza un'unità di codice a 16 bit e le emoji si trovano sopra U+FFFF. Java li divide in una coppia surrogata, in modo che occupino due caratteri. Legge il punto di codice con codePointAt() e ricostruisce il testo con Character.toChars() o Character.toString(codePoint).

La corda A. Java 11 ha aggiunto un overload di tipo int che legge il suo argomento come un punto di codice Unicode, e 65 è il punto di codice per A. String.valueOf(65) restituisce invece le cifre 65, il che rende facile confondere le due chiamate.

Concatenalo con l'operatore più, oppure chiama append() su un StringBuilder quando l'addizione avviene all'interno di un ciclo. Java Le stringhe sono immutabili, quindi ogni concatenazione alloca un nuovo oggetto anziché estendere quello esistente.

Non da Java 9. Le stringhe compatte hanno sostituito l'array di caratteri interno con un array di byte più un flag del codificatore, quindi il testo Latin-1 puro utilizza un byte per carattere. Nulla è cambiato nell'API pubblica e charAt() restituisce ancora un carattere.

Gli analizzatori statici basati sull'apprendimento automatico segnalano le conversioni sospette accettate dal compilatore, come ad esempio una chiamata charAt() non protetta o una String.valueOf(null) che si risolve nell'overload dell'array di caratteri. Classificano i risultati in base alla probabilità, riducendo così il rumore di una semplice scansione basata su regole.

Copilota GitHub Produce in modo affidabile le istruzioni String.valueOf() e charAt() su una sola riga, ma riproduce anche suggerimenti obsoleti dai suoi dati di addestramento, come il costruttore deprecato new Character(c). Compila tutti i suggerimenti e leggi gli avvisi di deprecazione.

Riassumi questo post con: