HOWTO · Java

Cómo convertir int a char en Java

Este tutorial muestra cómo convertir int a char en Java mediante una conversión a char, usando Character.forDigit() o tomando el primer carácter de Integer.toString().

En esta página

En Java, elige la operación según lo que represente el int: conviértelo con (char) si representa una unidad de código UTF-16; usa Character.forDigit() para un solo dígito en una base determinada; o usa Integer.toString() si necesitas específicamente el primer carácter de la representación decimal. Estas operaciones producen resultados distintos y no son intercambiables.

Convertir un int en un char mediante una conversión de tipo

Una conversión de tipo interpreta el valor entero como una unidad de código UTF-16; no formatea el número como texto decimal. Por ejemplo, la unidad de código 65 corresponde a A. Para obtener el carácter 1, el entero debe representar ese carácter (como ocurre con el literal '1') o ser un dígito del 0 al 9 al que se le suma '0'.

En Java, char almacena una unidad de código UTF-16 de 16 bits. Al convertir un int en char, el valor se reduce a ese tamaño, por lo que esta operación es útil cuando la entrada ya representa una unidad de código. No comprueba el rango: los valores fuera del rango de char no producen un error, y la unidad resultante quizá no sea el carácter que esperabas. Si el valor procede de la entrada del usuario o de un archivo, valídalo antes de convertirlo cuando sea importante conservar su valor numérico original.

Esta distinción también importa para Unicode. Muchos símbolos conocidos caben en un solo char, pero un punto de código Unicode suplementario se representa mediante dos unidades de código UTF-16, llamadas par sustituto. Un solo char no puede contener el punto de código completo. Si tus datos pueden incluir esos caracteres, usa una cadena o una operación que tenga en cuenta los puntos de código. Para un dígito decimal ASCII, sumar '0' solo funciona con valores del 0 al 9, porque los valores de las diez cifras son unidades de código consecutivas; no es una conversión general de números a texto.

Convertir un dígito con Character.forDigit()

Character.forDigit() asigna a un valor de dígito válido el carácter correspondiente en la base indicada. En base 10, el valor 6 representa '6'; en base 16, el valor 12 representa 'c'. El dígito debe estar entre 0 (inclusive) y la base (exclusive), y la base debe estar entre 2 y 36. Si alguno de los argumentos queda fuera de su rango válido, el método devuelve el carácter NUL (\u0000), no null.

Usa este método cuando el entero sea un solo dígito, no un número completo que quieras imprimir. Por ejemplo, la base hexadecimal es 16 y admite valores del 0 al 15; los valores del 10 al 15 se representan con las letras a a f. La letra devuelta está en minúscula. Si el formato de salida requiere hexadecimal en mayúsculas, convierte el carácter devuelto con Character.toUpperCase() después de elegir un dígito válido. El método inverso, Character.digit(character, radix), puede convertir un dígito de una base en su valor numérico.

El resultado NUL es un char cuyo valor es \u0000; no es la referencia Java null, y muchos terminales no muestran nada para ese carácter. Si la entrada puede proceder de fuera de tu programa, comprueba por tu cuenta que la base y el dígito estén dentro de sus rangos para no confundir este resultado con una conversión correcta. Para un número completo, como 42, convierte el valor entero mediante una operación de formato o de cadena, en vez de llamar una sola vez a Character.forDigit().

Obtener el primer carácter de Integer.toString()

Integer.toString(value).charAt(0) convierte el entero en su representación decimal como cadena y selecciona únicamente el primer carácter. Con el valor 1, ese carácter es '1'. Para un valor de varias cifras, devuelve el carácter inicial, no un char que represente el número completo.

Por ejemplo, el valor 42 produce la cadena "42", así que charAt(0) devuelve '4'. Un valor negativo empieza con el signo menos, por lo que esta expresión devuelve '-' para un valor como -42. Esta opción es adecuada cuando realmente necesitas examinar o mostrar el primer carácter de la representación decimal. Si necesitas todas las cifras, conserva el resultado como String; un solo char no puede representar un número formado por varios caracteres.

Elige según el significado de la entrada: usa una conversión de tipo para una unidad de código UTF-16, Character.forDigit() para un dígito en una base determinada y Integer.toString() junto con charAt(0) para obtener el primer carácter del texto decimal. Explicitar esta distinción evita confundir un valor numérico como 65 con los dos caracteres que se imprimen en "65".

El programa siguiente muestra las tres operaciones con los valores descritos. Imprime los caracteres resultantes en el mismo orden en que se presentan las operaciones.

public class IntToCharExample {
    public static void main(String[] args) {
        int codeUnit = 65;
        char letter = (char) codeUnit;

        int literalDigitValue = '1';
        char literalDigit = (char) literalDigitValue;
        int digit = 1;
        char addedZeroDigit = (char) (digit + '0');

        char decimalDigit = Character.forDigit(6, 10);
        char hexadecimalDigit = Character.forDigit(12, 16);

        int value = 1;
        char firstCharacter = Integer.toString(value).charAt(0);

        System.out.println(letter);
        System.out.println(literalDigit);
        System.out.println(addedZeroDigit);
        System.out.println(decimalDigit);
        System.out.println(hexadecimalDigit);
        System.out.println(firstCharacter);
    }
}
A
1
1
6
c
1