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.

  • ๐Ÿ”˜ String.valueOf: String.valueOf(myChar) retorna uma string de um รบnico caractere e expressa a intenรงรฃo da conversรฃo da maneira mais clara.
  • โ˜‘๏ธ Caractere.paraString: Character.toString(myChar) faz o mesmo trabalho e, como Java 9, simplesmente delega para String.valueOf.
  • โœ… charAt: charAt(index) retorna o caractere em uma posiรงรฃo baseada em zero e lanรงa StringIndexOutOfBoundsException fora do intervalo vรกlido.
  • ๐Ÿงช matrizes de caracteres: toCharArray() divide uma String em uma matriz de caracteres e new String(chars) reconstrรณi o texto a partir dessa matriz.
  • ๐Ÿ› ๏ธ Sem elenco: Uma String nunca pode ser convertida para um char, porque uma String รฉ um objeto e nรฃo um tipo primitivo relacionado.
  • ๐Ÿ“Œ Limite Unicode: Um caractere (char) contรฉm uma unidade de cรณdigo UTF-16 de 16 bits, portanto, um emoji precisa de dois caracteres ou de Character.toString(codePoint).

Java Cรณdigo que converte um caractere em uma string e uma string de volta para um caractere.

Neste tutorial, estudaremos dois pequenos programas que movem um valor entre dois caminhos. Java texto armazenado:

  1. Converter um caractere em uma string
  2. 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.

Perguntas Frequentes

Um char รฉ um tipo primitivo que contรฉm uma unidade de cรณdigo UTF-16 de 16 bits, escrita entre aspas simples. Uma String รฉ um objeto que contรฉm uma sequรชncia dessas unidades, escrita entre aspas duplas, e possui mรฉtodos como length() e charAt() que um tipo primitivo nรฃo possui.

Nรฃo. Desde Java 9. O mรฉtodo `Character.toString(char)` รฉ implementado como uma chamada para `String.valueOf(char)`, portanto, ambos executam o mesmo cรณdigo. Escolha o que for mais legรญvel no seu ambiente de trabalho; `String.format(โ€œ%cโ€, c)` รฉ a รบnica opรงรฃo realmente lenta.

Um caractere (char) armazena uma unidade de cรณdigo de 16 bits, e os emojis ficam acima de U+FFFF. Java divide-os em um par substituto, de forma que ocupem dois caracteres. Leia o ponto de cรณdigo com codePointAt() e reconstrua o texto com Character.toChars() ou Character.toString(codePoint).

A corda A. Java A versรฃo 11 adicionou uma sobrecarga de int que lรช seu argumento como um ponto de cรณdigo Unicode, e 65 รฉ o ponto de cรณdigo para A. String.valueOf(65) retorna os dรญgitos 65 em vez disso, o que torna as duas chamadas fรกceis de confundir.

Concatene-o com o operador de adiรงรฃo ou chame o mรฉtodo append() em um StringBuilder quando a adiรงรฃo ocorrer dentro de um loop. Java Como a classe String รฉ imutรกvel, cada concatenaรงรฃo aloca um novo objeto em vez de estender o anterior.

Nรฃo Desde Java 9. As strings compactas substituรญram o array de caracteres interno por um array de bytes mais um indicador de codificaรงรฃo, de modo que o texto Latin-1 puro usa um byte por caractere. Nada na API pรบblica mudou e charAt() ainda retorna um char.

Analisadores estรกticos de aprendizado de mรกquina sinalizam conversรตes suspeitas que um compilador aceita, como uma chamada nรฃo protegida a charAt() ou um String.valueOf(null) que resulta na sobrecarga de array de char. Eles classificam as descobertas por probabilidade, o que reduz o ruรญdo de uma simples varredura baseada em regras.

Copiloto do GitHub Produz de forma confiรกvel comandos de uma linha para String.valueOf() e charAt(), mas tambรฉm reproduz recomendaรงรตes desatualizadas de seus dados de treinamento, como o construtor obsoleto new Character(c). Compile todas as sugestรตes e leia os avisos de obsolescรชncia.

Resuma esta postagem com: