Cómo convertir caracteres en cadenas en Java (Ejemplos)

⚡ Resumen inteligente

Convertir un carácter a una cadena en Java Se realiza una sola llamada a String.valueOf(myChar) o Character.toString(myChar). Para el movimiento inverso se utiliza charAt(index), que extrae un carácter de una cadena según su posición.

  • 🔘 Cadena.valorDe: String.valueOf(myChar) devuelve una cadena de un solo carácter y expresa la intención de la conversión de la manera más clara.
  • ☑️ Carácter.toString: Character.toString(myChar) hace el mismo trabajo y, dado que Java 9, simplemente delega en String.valueOf.
  • charAt: charAt(index) devuelve el carácter en una posición basada en cero y lanza StringIndexOutOfBoundsException fuera del rango válido.
  • 🧪 matrices de caracteres: toCharArray() divide una cadena en una matriz de caracteres, y new String(chars) reconstruye el texto a partir de esa matriz.
  • 🛠️ Sin casting: Una cadena de caracteres (String) nunca se puede convertir a un carácter (char), porque una cadena de caracteres es un objeto y no un tipo primitivo relacionado.
  • 📌 Límite de Unicode: Un char contiene una unidad de código UTF-16 de 16 bits, por lo que un emoji necesita dos chars o Character.toString(codePoint).

Java Código que convierte un carácter a una cadena y una cadena de nuevo a un carácter.

En este tutorial, estudiaremos dos programas cortos que mueven un valor entre dos caminos. Java Almacena texto:

  1. Convierte un carácter en una cadena.
  2. Convierte una cadena de texto en un carácter.

Los dos tipos no son intercambiables. Un char es un tipo primitivo que contiene exactamente una unidad de código UTF-16 de 16 bits, escrita entre comillas simples como 'g'. Una cadena es un objeto que contiene una secuencia de esas unidades de código, escrita entre comillas dobles como “Guru99”. Debido a que uno es un tipo primitivo y el otro un objeto, ninguna conversión puede unirlos: un método de la biblioteca tiene que hacer el trabajo, y Java Proporciona uno para cada dirección.

Convertir caracteres en cadenas

Hay varias formas de convertir un carácter a una cadena en JavaInternamente a Java String almacena su texto como una matriz de unidades de código, razón por la cual un solo char encaja tan fácilmente en una. Un char es un tipo de dato sin signo de 16 bits, de dos bytes de ancho, que almacena valores de 0 a 65,535.

Podemos convertir un carácter a una cadena usando dos métodos: el método estático toString() de la clase Character y el método estático valueOf() de la clase String. Ambos devuelven una cadena nueva de un carácter de longitud, y los dos programas que se muestran a continuación imprimen el mismo resultado.

Método 1: usar el método toString()

El programa a continuación almacena la letra g en una variable de caracteres y lo pasa a Character.toString(), que devuelve ese carácter como una cadena de texto. El código es editable, así que cambia la letra y ejecútalo de nuevo para ver el resultado.

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);
  }
} 

Rendimiento esperado :

String is: g

Método 2: usar el método valueOf()

El segundo programa intercambia String.valueOf(myChar) y no cambia nada más. Dado que Java 9 Las dos llamadas son la misma operación: Character.toString(char) se implementa como una llamada a String.valueOf(char), por lo que ninguna es notablemente más rápida que la otra.

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);
  }
}

Rendimiento esperado :

String is: g

Otras formas de convertir un carácter en una cadena

En el código antiguo y en las preguntas de las entrevistas aparecen otras cuatro rutas. Todas funcionan, pero ninguna es tan clara como los dos métodos anteriores, y dos de ellas asignan más recursos de los necesarios.

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);
  }
}

Rendimiento esperado:

gggg

La tabla detalla cuándo merece la pena utilizar cada ruta.

Método Ejemplo Notas
Cadena.valorDe(carácter) Cadena.valorDe(miCarácter) Recomendado. Una sola llamada, sin objetos adicionales más allá de la cadena devuelta.
Carácter.toString(carácter) Carácter.toString(myChar) Igualmente bueno. Disponible desde Java 1.4 y delega a String.valueOf desde Java 9.
Concatenación miPersonaje + “” Obras y en Java En versiones posteriores, se compila a una llamada invokedynamic en lugar de a un StringBuilder, por lo que la antigua advertencia de que es lento ya no es válida. Aun así, oculta la intención.
Envoltorio de personaje Carácter.valorDe(miCarácter).aCadena() Boxes el carácter primero. Use Character.valueOf, no el nuevo constructor Character(char), que ha sido obsoleto para su eliminación desde Java 9.
matriz de caracteres nueva cadena(nuevo carácter[]{myChar}) Asigna memoria a un array y lo copia. Resérvelo para el caso en que ya tenga un array de caracteres.
Cadena.formato String.format("%c", myChar) Es, con diferencia, el método más lento, ya que la cadena de formato se analiza en tiempo de ejecución. Solo resulta útil cuando el carácter forma parte de una plantilla más amplia.

Una vez cubiertas ambas direcciones de la conversión de un solo carácter, el siguiente paso es la operación inversa.

Convertir cadena a carácter

Podemos convertir una cadena a carácter usando el método charAt() de la clase String. El método toma un índice basado en cero y devuelve el carácter que se encuentra en esa posición, por lo que leer cada carácter significa lavaboping desde 0 hasta length() menos uno. Solicitar un índice menor que 0 o igual o superior a length() genera una excepción StringIndexOutOfBoundsException.

El programa que se muestra a continuación recorre la cadena Guru99 una posición a la vez e imprime cada carácter con su índice.

//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);
	      }
 
	}
 
}

Rendimiento esperado:

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

Tenga en cuenta que una cadena no se puede convertir simplemente: `char c = (char) myStr;` no compila, porque una cadena es un objeto y `char` es un tipo primitivo. Para una cadena que se sabe que contiene exactamente un carácter, `charAt(0)` es la solución completa.

Convierte una cadena de caracteres en un array de caracteres y viceversa.

Cuando se necesita cada carácter a la vez en lugar de un índice a la vez, toCharArray() devuelve una parrillada fresca. Convertir ese array de nuevo en texto es tarea del constructor String(char[]) o String.valueOf(char[]), y ambos copian el array de forma segura, de modo que las ediciones posteriores del array no alteren la cadena.

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));
  }
}

Rendimiento esperado:

6
G
Guru99
Guru99
Guru

Un cuarto método, getChars(srcBegin, srcEnd, dst, dstBegin), copia un rango en una matriz que ya posees en lugar de asignar una nueva. El índice final es exclusivo, por lo que getChars(0, 4, part, 0) produce Guru más bien que Guru9. Los límites fuera de rango generan una excepción IndexOutOfBoundsException.

Los tres enfoques difieren principalmente en lo que asignan, como se resume a continuación.

Task Llame hoy al Lo que asigna
Cadena a matriz de caracteres miStr.toCharArray() Un nuevo array; seguro en una cadena vacía, donde devuelve un array de longitud cero.
matriz de caracteres a cadena nueva cadena(caracteres) o cadena.valorDe(caracteres) Una nueva cadena de texto más una copia interna del array.
Rango en una matriz existente myStr.getChars(0, 4, parte, 0) Nada nuevo; escribe en el array que le proporciones.

Errores comunes al convertir char y String en Java

La mayoría de los problemas en estas conversiones provienen de seis errores recurrentes, más que de los métodos en sí. La tabla relaciona cada error con su solución.

Primaria Causa Solución
Tipos incompatibles: String no se puede convertir a char. Un intento de conversión, como por ejemplo char c = (char) myStr; En su lugar, llama a myStr.charAt(0). No existe conversión entre un objeto y un tipo primitivo.
StringIndexOutOfBoundsException charAt() llamado con un índice negativo, o con length() en una cadena vacía. Protéjase con isEmpty() o compare el índice con length() antes de leer.
String.valueOf(null) lanza NullPointerException El nulo simple coincide con la sobrecarga char[], que es la más específica. Escribe String.valueOf((Object) null) cuando el texto literal null sea lo que deseas.
Character.toString(65) devuelve A, no 65. Java 11 agregó una sobrecarga de Character.toString(int) que lee su argumento como un punto de código Unicode. Utilice String.valueOf(65) o Integer.toString(65) para los dígitos 65.
Un emoji se imprime como dos símbolos distorsionados. Los caracteres superiores a U+FFFF ocupan dos caracteres, un sustituto alto seguido de un sustituto bajo. Lee el valor con codePointAt(0), luego reconstruyelo con Character.toString(codePoint) en Java 11 y posteriores.
Advertencia de obsolescencia en el nuevo Character(myChar) El constructor Character(char) ha sido descontinuado desde Java 9 y marcado para su remoción Utilice Character.valueOf(myChar), o deje que el autoboxing proporcione el contenedor.

La misma clase String admite muchos ejercicios relacionados: Invertir una cadena con recursión, Comparando dos cadenas, y salida formateada de impresión.

Preguntas Frecuentes

Un carácter es un tipo de dato primitivo que contiene una unidad de código UTF-16 de 16 bits, escrita entre comillas simples. Una cadena es un objeto que contiene una secuencia de esas unidades, escrita entre comillas dobles, y cuenta con métodos como length() y charAt() que un tipo de dato primitivo no puede tener.

No. Desde entonces Java 9. Character.toString(char) se implementa como una llamada a String.valueOf(char), por lo que ambas ejecutan el mismo código. Elija la que resulte más legible en su entorno de trabajo; String.format(“%c”, c) es la única opción realmente lenta.

Un carácter almacena una unidad de código de 16 bits, y los emojis se sitúan por encima de U+FFFF. Java Los divide en un par sustituto, de modo que ocupan dos caracteres. Lee el punto de código con codePointAt() y reconstruye el texto con Character.toChars() o Character.toString(codePoint).

La cuerda A. Java 11 agregó una sobrecarga de int que lee su argumento como un punto de código Unicode, y 65 es el punto de código para A. String.valueOf(65) devuelve los dígitos 65 en su lugar, lo que hace que sea fácil confundir las dos llamadas.

Concatenalo con el operador más, o llama a append() en un StringBuilder cuando la suma se realice dentro de un bucle. Java Las cadenas de caracteres son inmutables, por lo que cada concatenación asigna un nuevo objeto en lugar de extender el anterior.

No desde Java 9. Las cadenas compactas reemplazaron la matriz interna de caracteres con una matriz de bytes más un indicador de codificación, por lo que el texto Latin-1 puro usa un byte por carácter. Nada cambió en la API pública, y charAt() todavía devuelve un carácter.

Los analizadores estáticos de aprendizaje automático detectan conversiones sospechosas que acepta el compilador, como una llamada a `charAt()` sin protección o un `String.valueOf(null)` que se resuelve en la sobrecarga de la matriz de caracteres. Clasifican los hallazgos por probabilidad, lo que reduce el ruido de un análisis basado en reglas simple.

Copiloto de GitHub Genera de forma fiable soluciones sencillas con String.valueOf() y charAt(), pero también reproduce consejos obsoletos de sus datos de entrenamiento, como el constructor obsoleto new Character(c). Compile todas las sugerencias y lea las advertencias de obsolescencia.

Resumir este post con: