Obtener carácter en cadena por índice en Java

Mohammad Irfan 12 octubre 2023
  1. Obtener el carácter String utilizando el método charAt() en Java
  2. Convierta Char en String utilizando el método String.valueOf()
  3. Obtener Char Array de una cadena en Java
  4. Obtención de caracteres del plano multilingüe suplementario (SMP) de Unicode
  5. Resumen
Obtener carácter en cadena por índice en Java

Este tutorial presenta cómo obtener caracteres String por índice en Java y también enumera algunos códigos de ejemplo para comprender el tema.

Las cadenas se utilizan para almacenar una secuencia de caracteres. Al igual que los arrays, las cadenas también siguen una indexación basada en cero. Esto significa que al primer carácter de la cadena se le asigna un valor de índice de cero. Podemos obtener caracteres individuales de una cadena utilizando sus índices. En este tutorial, aprenderemos cómo hacer esto.

Obtener el carácter String utilizando el método charAt() en Java

El método charAt() toma un valor de índice como parámetro y devuelve un carácter presente en ese índice en la cadena. Es la forma más sencilla de obtener caracteres de una cadena y es un método de clase 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);
  }
}

Producción :

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

Como vimos en el código anterior, el tipo de retorno de este método es char. Podemos convertir este tipo char en una cadena usando el método toString() de la clase Character e incluso obtener la longitud de esta cadena usando el 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);
  }
}

Producción :

Length: 1
String: t

Convierta Char en String utilizando el método String.valueOf()

Después de obtener un carácter de una cadena, podemos usar el método String.valueOf() para convertir un carácter en una String si es necesario.

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);
  }
}

Producción :

Length: 1
String: t

También podemos concatenar una cadena vacía al carácter para convertirla en una cadena. Las citas sin nada en el medio representan una cadena vacía. Esta es una de las formas más simples e implícitas de obtener un objeto String en 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);
  }
}

Producción :

Length: 1
String: t

Obtener Char Array de una cadena en Java

Podemos obtener un elemento de array por su índice con la ayuda de corchetes. Si convertimos nuestra cadena en un array de tipo char, podemos obtener cualquier carácter de ella.

Java proporciona un conveniente método toCharArray() que devuelve un array de caracteres. Podemos usar este método en una cadena y obtener un array de caracteres para ella.

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]);
  }
}

Producción :

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

Podemos usar los métodos descritos en la sección anterior para convertir el carácter en una cadena.

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);
  }
}

Producción :

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

Obtención de caracteres del plano multilingüe suplementario (SMP) de Unicode

En algunos casos raros, nuestra cadena puede contener caracteres que no están presentes en el plano multilingüe básico Unicode. Un ejemplo podría ser una serie de emojis o emoticonos. Estos caracteres forman parte del plano multilingüe suplementario (SMP) de Unicode.

Los enfoques anteriores no funcionan para estos personajes. Podemos usar el método codePointAt() para obtener dichos caracteres de la cadena. Este método devuelve un número entero que representa el valor Unicode del carácter en ese índice. Asegúrese de tener instalada la fuente adecuada para ver estos 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
		}
	}
}

Producción :

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

Si intentamos imprimir la misma cadena usando el método charAt(), obtenemos el siguiente resultado.

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 + " ");
		}
    }
}

Producción :

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

Resumen

Las cadenas, al igual que los arrays, siguen una indexación basada en cero. Podemos obtener caracteres individuales de la cadena usando el método charAt(). También podemos convertir la cadena en un array de caracteres y luego buscar caracteres individuales usando sus índices. Si desea que el carácter individual sea una cadena y no un carácter, utilice el método Character.toString() o String.valueOf() para convertirlo. A veces, nuestra cadena puede contener caracteres fuera del plano multilingüe básico. En tales casos, podemos usar el método codePointAt() en lugar del método charAt().

Artículo relacionado - Java String