W3docs

Caracteres en Java (char)

Representa caracteres individuales en Java con el primitivo char y usa la clase envolvente Character para métodos de utilidad.

char es uno de los ocho tipos de datos primitivos de Java. Almacena un único valor de 16 bits sin signo — una unidad de código UTF-16. Para la mayoría de los caracteres latinos, cirílicos, griegos, árabes, CJK y muchos otros sistemas de escritura, esto es suficiente para representar el carácter completo. Para emojis y algunos sistemas de escritura menos comunes, un carácter percibido por el usuario ocupa dos chars (un par sustituto).

Esta página cubre cómo escribir literales char, el hecho de que un char es en realidad un entero pequeño, la clase envolvente Character para clasificación con conciencia Unicode, el problema con los pares sustitutos y los arrays char[]. Una vez que te sientas cómodo con los caracteres individuales, la clase String se construye sobre ellos.

Literales char

Un literal de carácter es un carácter encerrado entre comillas simples:

char a = 'A';
char z = 'z';
char digit = '7';
char punct = '!';

También puedes usar secuencias de escape y escapes Unicode:

char newline = '\n';
char tab = '\t';
char quote = '\'';
char back = '\\';
char copy = '©';   // ©
char pi = 'π';     // π

char es un entero de 16 bits

Un valor char es, internamente, un entero de 16 bits sin signo. Puedes realizar aritmética con él y convertirlo a/desde int:

char c = 'A';
int code = c;             // 65 — implicit widening to int
char next = (char) (c + 1); // 'B'
char digit5 = (char) ('0' + 5); // '5'

El truco clásico para comprobar rangos de caracteres:

boolean isUpper = c >= 'A' && c <= 'Z';
boolean isDigit = c >= '0' && c <= '9';
Advertencia

Debido a que un char se amplía a int, 'A' + 'B' es el entero 131, no la cadena "AB". Dentro de System.out.println("x" + c), el String de la izquierda fuerza la concatenación, pero c1 + c2 por sí solo es aritmética. Convierte de vuelta con (char) cuando quieras un resultado de carácter.

La clase envolvente Character

Character es la clase envolvente. Tiene docenas de métodos de utilidad estáticos para clasificar y convertir caracteres — más confiables que el estilo c >= '0' anterior porque son conscientes de Unicode:

Character.isLetter('A');         // true
Character.isDigit('7');          // true
Character.isLetterOrDigit('é');  // true
Character.isWhitespace(' ');     // true
Character.isUpperCase('A');      // true
Character.isLowerCase('a');      // true
Character.toUpperCase('a');      // 'A'
Character.toLowerCase('A');      // 'a'
Character.getNumericValue('7');  // 7
Character.toString('A');         // "A"

Prefiere los métodos de Character sobre las comprobaciones manuales de rangos cuando puedas encontrar texto que no sea ASCII.

Un char es una unidad de código UTF-16, no siempre un carácter de usuario

Esta es la parte sutil. Las cadenas de Java son UTF-16. Para caracteres con puntos de código hasta U+FFFF (el Plano Multilingüe Básico — la mayoría de los idiomas, la mayoría de la puntuación), un punto de código cabe en un char. Para caracteres por encima de U+FFFF — la mayoría de los emojis, escrituras antiguas y algunos símbolos musicales — se necesitan dos chars (un par sustituto).

String emoji = "🎉";
System.out.println(emoji.length());           // 2 — surrogate pair
System.out.println(emoji.codePointCount(0, 2)); // 1 — one user character

Si tu código procesa texto suministrado por el usuario y podría encontrar emojis o escrituras poco comunes, prefiere los métodos con conciencia de puntos de código (String.codePoints(), Character.toString(int), Character.isLetter(int)) sobre los basados en char.

char[] — arrays de caracteres

Un char[] se usa a veces para el procesamiento de texto de alto rendimiento o para contraseñas (puedes poner a cero el array después de usarlo, mientras que no puedes poner a cero un String inmutable):

char[] greeting = {'H', 'e', 'l', 'l', 'o'};
String s = new String(greeting);     // "Hello"

char[] back = s.toCharArray();

Una demostración

java— editable, runs on the server

Qué sigue

Clase Math de Java — la biblioteca de métodos estáticos para aritmética que va más allá de +, -, *, /.

Práctica

Práctica
¿Cuáles afirmaciones sobre char en Java son correctas?
¿Cuáles afirmaciones sobre char en Java son correctas?
Was this page helpful?