Caracteres Java (char)
Represente caracteres individuais em Java com o primitivo char e use a classe wrapper Character para métodos utilitários.
char é um dos oito tipos de dados primitivos do Java. Ele armazena um único valor sem sinal de 16 bits — uma unidade de código UTF-16. Para a maioria dos scripts Latino, Cirílico, Grego, Árabe, CJK e muitos outros, isso cabe no caractere inteiro. Para emojis e alguns scripts menos comuns, um caractere percebido pelo usuário ocupa dois chars (um par substituto).
Esta página aborda como escrever literais char, o fato de que um char é na verdade um pequeno inteiro, a classe wrapper Character para classificação com consciência Unicode, o problema com pares substitutos e arrays char[]. Quando você se sentir confortável com caracteres individuais, a classe String é construída sobre eles.
Literais char
Um literal de caractere é um único caractere entre aspas simples:
char a = 'A';
char z = 'z';
char digit = '7';
char punct = '!';Você também pode usar sequências de escape e escapes Unicode:
char newline = '\n';
char tab = '\t';
char quote = '\'';
char back = '\\';
char copy = '©'; // ©
char pi = 'π'; // πchar é um inteiro de 16 bits
Um valor char é, internamente, um inteiro sem sinal de 16 bits. Você pode fazer aritmética com ele e converter de/para int:
char c = 'A';
int code = c; // 65 — implicit widening to int
char next = (char) (c + 1); // 'B'
char digit5 = (char) ('0' + 5); // '5'O truque clássico para testar intervalos de caracteres:
boolean isUpper = c >= 'A' && c <= 'Z';
boolean isDigit = c >= '0' && c <= '9';Como um char é ampliado para int, 'A' + 'B' é o inteiro 131, não a string "AB". Dentro de um System.out.println("x" + c) a String à esquerda força a concatenação, mas c1 + c2 por si só é aritmética. Use o cast com (char) quando quiser um resultado de caractere.
O wrapper Character
Character é a classe wrapper. Ela possui dezenas de métodos utilitários estáticos para classificar e converter caracteres — mais confiáveis do que o estilo c >= '0' acima, pois são compatíveis com 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"Prefira os métodos de Character em vez de verificações manuais de intervalos quando puder encontrar texto não-ASCII.
Um char é uma unidade de código UTF-16, nem sempre um caractere do usuário
Esta é a parte sutil. As strings Java são UTF-16. Para caracteres com pontos de código até U+FFFF (o Plano Multilíngue Básico — a maioria dos idiomas, a maioria da pontuação), um ponto de código cabe em um char. Para caracteres acima de U+FFFF — a maioria dos emojis, scripts antigos e alguns símbolos musicais — são necessários dois chars (um par substituto).
String emoji = "🎉";
System.out.println(emoji.length()); // 2 — surrogate pair
System.out.println(emoji.codePointCount(0, 2)); // 1 — one user characterSe o seu código processa texto fornecido pelo usuário e pode encontrar emojis ou scripts raros, prefira os métodos com consciência de ponto de código (String.codePoints(), Character.toString(int), Character.isLetter(int)) em vez dos baseados em char.
char[] — arrays de caracteres
Um char[] é às vezes usado para processamento de texto sensível ao desempenho ou para senhas (você pode zerar o array após o uso, enquanto não pode zerar uma String imutável):
char[] greeting = {'H', 'e', 'l', 'l', 'o'};
String s = new String(greeting); // "Hello"
char[] back = s.toCharArray();Uma demonstração
O que vem a seguir
Classe Math do Java — a biblioteca de métodos estáticos para aritmética que vai além de +, -, *, /.