Obter caractere em string por índice em Java

Mohammad Irfan 12 outubro 2023
  1. Obtenha o caractere String usando o método charAt() em Java
  2. Converta Char em String usando o método String.valueOf()
  3. Obtendo Char Array de uma String em Java
  4. Buscando caracteres do plano multilingue suplementar Unicode (SMP)
  5. Resumo
Obter caractere em string por índice em Java

Este tutorial apresenta como obter caracteres String por índice em Java e também lista alguns códigos de exemplo para entender o tópico.

Strings são usados ​​para armazenar uma sequência de caracteres. Assim como os arrays, as strings também seguem a indexação baseada em zero. Isso significa que o primeiro caractere da string é atribuído a um valor de índice igual a zero. Podemos buscar caracteres individuais de uma string usando seus índices. Neste tutorial, aprenderemos como fazer isso.

Obtenha o caractere String usando o método charAt() em Java

O método charAt() recebe um valor de índice como parâmetro e retorna um caractere presente naquele índice na string. É a maneira mais simples de buscar caracteres de uma string e é um método de classe String.

public class Demo {
  public static void main(String[] args) {
    String s = "test string";
    char characterAtIdx1 = s.charAt(1); // character e
    char characterAtIdx4 = s.charAt(4); // whitespace
    char characterAtIdx5 = s.charAt(5); // character s

    System.out.println("The string is: " + s);
    System.out.println("Character at Index 1: " + characterAtIdx1);
    System.out.println("Character at Index 4: " + characterAtIdx4);
    System.out.println("Character at Index 5: " + characterAtIdx5);
  }
}

Produção:

The string is: test string
Character at Index 1: e
Character at Index 4:  
Character at Index 5: s

Como vimos no código acima, o tipo de retorno desse método é char. Podemos converter esse tipo de caractere em uma string usando o método toString() da classe Character e até mesmo obter o comprimento dessa string usando o método length().

public class Demo {
  public static void main(String[] args) {
    String s = "test string";
    char characterAtIdx6 = s.charAt(6); // character t
    String stringAtIdx6 = Character.toString(characterAtIdx6); // char to string
    System.out.println("Length: " + stringAtIdx6.length());
    System.out.println("String: " + stringAtIdx6);
  }
}

Produção:

Length: 1
String: t

Converta Char em String usando o método String.valueOf()

Depois de obter um caractere de uma string, podemos usar o método String.valueOf() para converter um caractere em uma String, se necessário.

public class Demo {
  public static void main(String[] args) {
    String s = "test string";
    char characterAtIdx6 = s.charAt(6); // character t
    String stringAtIdx6 = String.valueOf(characterAtIdx6); // char to string

    System.out.println("Length: " + stringAtIdx6.length());
    System.out.println("String: " + stringAtIdx6);
  }
}

Produção:

Length: 1
String: t

Também podemos concatenar uma string vazia ao caractere para convertê-la em uma string. As aspas sem nada no meio representam uma string vazia. Esta é uma das maneiras mais simples e implícitas de obter um objeto String em Java.

public class Demo {
  public static void main(String[] args) {
    String s = "test string";
    char characterAtIdx6 = s.charAt(6); // character t
    String stringAtIdx6 = "" + characterAtIdx6; // char to string

    System.out.println("Length: " + stringAtIdx6.length());
    System.out.println("String: " + stringAtIdx6);
  }
}

Produção:

Length: 1
String: t

Obtendo Char Array de uma String em Java

Podemos obter um elemento do array por seu índice com a ajuda de colchetes. Se convertermos nossa string em um array do tipo char, podemos buscar qualquer caractere dela.

Java fornece um método toCharArray() conveniente que retorna um array char. Podemos usar este método em uma string e obter um array de char para ele.

public class Demo {
  public static void main(String[] args) {
    String s = "test string";
    char[] charArr = s.toCharArray();

    System.out.println("The string is: " + s);
    System.out.println("Character at Index 1: " + charArr[1]);
    System.out.println("Character at Index 4: " + charArr[4]);
    System.out.println("Character at Index 5: " + charArr[5]);
  }
}

Produção:

The string is: test string
Character at Index 1: e
Character at Index 4:  
Character at Index 5: s

Podemos usar os métodos descritos na seção anterior para converter o char em uma string.

public class Demo {
  public static void main(String[] args) {
    String s = "test string";
    char[] charArr = s.toCharArray();

    char characterAtIdx6 = charArr[6]; // character t
    String str1 = Character.toString(characterAtIdx6); // char to string
    String str2 = String.valueOf(characterAtIdx6); // char to string
    String str3 = "" + characterAtIdx6; // char to string

    System.out.println("Using toString()");
    System.out.println("Length: " + str1.length() + " String: " + str1);

    System.out.println("\nUsing valueOf()");
    System.out.println("Length: " + str2.length() + " String: " + str2);

    System.out.println("\nUsing empty string concatenation");
    System.out.println("Length: " + str3.length() + " String: " + str3);
  }
}

Produção:

Using toString()
Length: 1 String: t
Using valueOf()
Length: 1 String: t
Using empty string concatenation
Length: 1 String: t

Buscando caracteres do plano multilingue suplementar Unicode (SMP)

Em alguns casos raros, nossa string pode conter caracteres não presentes no plano multilíngue Unicode básico. Um exemplo pode ser uma sequência de emojis ou emoticons. Esses caracteres fazem parte do Unicode Supplementary Multilingual Plane (SMP).

As abordagens acima não funcionam para esses personagens. Podemos usar o método codePointAt() para buscar esses caracteres da string. Este método retorna um inteiro que representa o valor Unicode do caractere nesse índice. Certifique-se de ter a fonte apropriada instalada para visualizar esses caracteres.

public class Demo
{
	public static void main(String[] args)
	{
		String s = "😀 the grinning emoji";
		for(int i=0; i<s.length();)
		{
			int codePoint = s.codePointAt(i);
			char[] charArr = Character.toChars(codePoint);//More than one characters may be required to represent an SMP char 
			System.out.print(new String(charArr) + " ");
			
			i = i + Character.charCount(codePoint);//Increase i according to the number of chars required for that SMP char
		}
	}
}

Produção:

😀   t h e   g r i n n i n g   e m o j i 

Se tentarmos imprimir a mesma string usando o método charAt(), obteremos a seguinte saída.

public class Demo
{
    public static void main(String args[])
    {
      String s = "😀 the grinning emoji";
		for(int i=0; i<s.length(); i++)
		{
			char c = s.charAt(i);
			System.out.print(c + " ");
		}
    }
}

Produção:

? ?   t h e   g r i n n i n g   e m o j i 

Resumo

Strings, assim como matrizes, seguem a indexação baseada em zero. Podemos obter caracteres individuais da string usando o método charAt(). Também podemos converter a string em um array de caracteres e, em seguida, buscar caracteres individuais usando seus índices. Se você quiser o caractere único como uma string e não como um char, use o método Character.toString() ou String.valueOf() para convertê-lo. Às vezes, nossa string pode conter caracteres fora do plano multilíngue básico. Nesses casos, podemos usar o método codePointAt() em vez do método charAt().

Artigo relacionado - Java String