Como converter Char em String em Java (Exemplos)
โก Resumo Inteligente
Converter um caractere em uma string em Java A funรงรฃo `charAt(index)` extrai um caractere de uma string a partir de sua posiรงรฃo. Para obter o resultado desejado, utiliza-se `charAt(index)`, que extrai um caractere da string pela sua posiรงรฃo.
Neste tutorial, estudaremos dois pequenos programas que movem um valor entre dois caminhos. Java texto armazenado:
- Converter um caractere em uma string
- Converter uma string em um caractere.
Os dois tipos nรฃo sรฃo intercambiรกveis. Um char รฉ um tipo primitivo que armazena exatamente uma unidade de cรณdigo UTF-16 de 16 bits, escrita entre aspas simples como 'g'. Uma String รฉ um objeto que armazena uma sequรชncia dessas unidades de cรณdigo, escrita entre aspas duplas como โGuru99โ. Como um รฉ um tipo primitivo e o outro um objeto, nenhuma conversรฃo de tipo pode fazer a ponte entre eles โ um mรฉtodo de biblioteca precisa realizar essa tarefa, e Java Fornece um para cada direรงรฃo.
Converter caractere em string
Existem vรกrias maneiras de converter um caractere em uma string. JavaInternamente a Java A string armazena seu texto. como uma matriz de unidades de cรณdigo, razรฃo pela qual um รบnico caractere se encaixa tรฃo facilmente em uma delas. Um caractere รฉ um tipo de dado sem sinal de 16 bits, com dois bytes de largura, que armazena valores de 0 a 65,535.
Podemos converter um char em uma String usando dois mรฉtodos: o mรฉtodo estรกtico toString() da classe Character e o mรฉtodo estรกtico valueOf() da classe String. Ambos retornam uma nova String com um รบnico caractere, e os dois programas abaixo imprimem o mesmo resultado.
Mรฉtodo 1: usando o mรฉtodo toString()
O programa abaixo armazena a letra g em um variรกvel de caractere e o passa para Character.toString(), que retorna esse caractere รบnico como uma String. O cรณdigo รฉ editรกvel, entรฃo altere a letra e execute-o novamente para ver a saรญda.
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);
}
}
Resultado esperado:
String is: g
Mรฉtodo 2: usando o mรฉtodo valueOf()
O segundo programa substitui `String.valueOf(myChar)` e nรฃo altera mais nada. Java 9. As duas chamadas sรฃo a mesma operaรงรฃo: Character.toString(char) รฉ implementado como uma chamada para String.valueOf(char), portanto, nenhuma รฉ mensuravelmente mais rรกpida que a outra.
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);
}
}
Resultado esperado:
String is: g
Outras maneiras de converter um caractere em uma string.
Outras quatro rotas aparecem em cรณdigos mais antigos e em perguntas de entrevistas. Todas funcionam, mas nenhuma delas รฉ tรฃo clara quanto os dois mรฉtodos acima, e duas delas alocam mais memรณria do que o necessรกrio.
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); } }
Resultado esperado:
gggg
A tabela indica quando vale a pena usar cada rota.
| Forma | Exemplo | Notas |
|---|---|---|
| String.valueOf(char) | String.valueOf(myChar) | Recomendado. Uma รบnica chamada, sem objetos adicionais alรฉm da String retornada. |
| Caractere.toString(caractere) | Caractere.toString(meuCaractere) | Igualmente bom. Disponรญvel desde Java 1.4 e delega para String.valueOf desde Java 9. |
| Concatenaรงรฃo | meuChar + โโ | Obras, e em Java A partir da versรฃo 9, a compilaรงรฃo resulta em uma chamada `invokedynamic` em vez de um `StringBuilder`, portanto, o antigo aviso de lentidรฃo nรฃo se aplica mais. Ainda assim, a intenรงรฃo permanece oculta. |
| Envoltรณrio de personagem | Caractere.valorDe(meuCaractere).toString() | BoxUse `Character.valueOf`, e nรฃo o construtor `new Character(char)`, que foi descontinuado e serรก removido em breve. Java 9. |
| matriz de caracteres | novo String(novo char[]{myChar}) | Aloca um array e o copia. Reserve este mรฉtodo para o caso em que vocรช jรก possui um array de caracteres. |
| String.format | String.format(โ%cโ, myChar) | De longe o mais lento, porque a string de formataรงรฃo รฉ analisada em tempo de execuรงรฃo. รtil apenas quando o caractere faz parte de um modelo maior. |
Com as duas direรงรตes da conversรฃo de um รบnico caractere jรก abordadas, a prรณxima operaรงรฃo รฉ a inversa.
Converter String em char
Podemos converter uma String em um char usando o mรฉtodo charAt() da classe String. O mรฉtodo recebe um รญndice baseado em zero e retorna o caractere que estรก nessa posiรงรฃo; portanto, ler cada caractere significa looping de 0 atรฉ length() menos um. Solicitar um รญndice menor que 0 ou igual ou superior a length() gera uma exceรงรฃo StringIndexOutOfBoundsException.
O programa abaixo percorre a string. Guru99 uma posiรงรฃo de cada vez e imprime cada caractere com seu รญ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);
}
}
}
Resultado 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
Note que uma String nรฃo pode ser simplesmente convertida para um tipo primitivo: `char c = (char) myStr;` nรฃo compila, porque uma String รฉ um objeto e um char รฉ um tipo primitivo. Para uma String que jรก se sabe conter exatamente um caractere, `charAt(0)` รฉ a resposta completa.
Converter uma string em um array de caracteres e vice-versa.
Quando todos os caracteres sรฃo necessรกrios de uma sรณ vez, em vez de um รญndice por vez, toCharArray() retorna um valor. uma nova matriz de caracteresTransformar esse array de volta em texto รฉ tarefa do construtor String(char[]) ou String.valueOf(char[]), e ambos copiam o array de forma segura, para que ediรงรตes posteriores no array nรฃo alterem a String.
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)); } }
Resultado esperado:
6 G Guru99 Guru99 Guru
Um quarto mรฉtodo, getChars(srcBegin, srcEnd, dst, dstBegin), copia um intervalo para uma matriz que vocรช jรก possui em vez de alocar uma nova. O รญndice final รฉ exclusivo, razรฃo pela qual getChars(0, 4, part, 0) retorna Guru em vez de Guru9. Valores fora dos limites estabelecidos geram uma exceรงรฃo IndexOutOfBoundsException.
As trรชs abordagens diferem principalmente naquilo que alocam, conforme resumido abaixo.
| Tarefa | Ligar | O que ele aloca |
|---|---|---|
| Matriz de conversรฃo de string para caractere | myStr.toCharArray() | Um novo array; seguro para uma String vazia, onde retorna um array de comprimento zero. |
| array de caracteres para String | novo String(chars) ou String.valueOf(chars) | Uma nova string mais uma cรณpia interna do array. |
| Integre um intervalo a um array existente. | myStr.getChars(0, 4, part, 0) | Nada de novo; ele escreve no array que vocรช fornecer. |
Erros comuns ao converter char e String em Java
A maior parte dos problemas nessas conversรตes decorre de seis erros recorrentes, e nรฃo dos mรฉtodos em si. A tabela relaciona cada um deles com a respectiva soluรงรฃo.
| Problema | Causar | Fixar |
|---|---|---|
| Tipos incompatรญveis: String nรฃo pode ser convertida para char | Uma tentativa de conversรฃo, como char c = (char) myStr; | Chame myStr.charAt(0) em vez disso. Nรฃo hรก conversรฃo entre um objeto e um primitivo. |
| StringIndexOutOfBoundsException | charAt() foi chamado com um รญndice negativo ou com length() em uma String vazia. | Verifique com isEmpty() ou compare o รญndice com length() antes de ler. |
| String.valueOf(null) lanรงa NullPointerException | O valor nulo puro corresponde ร sobrecarga de char[], que รฉ a mais especรญfica. | Escreva String.valueOf((Object) null) quando o texto literal null for o que vocรช deseja. |
| Character.toString(65) retorna A, nรฃo 65 | Java A versรฃo 11 adicionou uma sobrecarga de `Character.toString(int)` que lรช seu argumento como um ponto de cรณdigo Unicode. | Use String.valueOf(65) ou Integer.toString(65) para os dรญgitos 65. |
| Um emoji รฉ impresso como dois sรญmbolos ilegรญveis. | Os caracteres acima de U+FFFF ocupam dois caracteres, um substituto alto seguido por um substituto baixo. | Leia o valor com codePointAt(0) e, em seguida, reconstrua-o com Character.toString(codePoint) em Java 11 e mais tarde. |
| Aviso de obsolescรชncia em novo Character(myChar) | O construtor Character(char) foi descontinuado desde Java 9 e marcado para remoรงรฃo | Use Character.valueOf(myChar), ou deixe que o autoboxing forneรงa o wrapper. |
A mesma classe String suporta diversos exercรญcios relacionados: Invertendo uma string com recursรฃo, comparando duas strings e impressรฃo de saรญda formatada.
