Arrays de caracteres en Java

Un array de caracteres es un array que contiene datos de tipo char.

Los arrays de caracteres en Java se crean de forma similar a un array unidimensional de cualquier otro tipo de datos.

A diferencia de los demás arrays, se puede mostrar el contenido completo de un array de caracteres mediante una sola instrucción print o printf.
Ejemplo: Array de 8 caracteres llamado cadena. Por defecto los elementos del array se inicializan con el carácter nulo (carácter \u0000 Unicode).
char [] cadena = new char[8];

De forma gráfica el array de caracteres cadena se puede representar así:  

\u0000
\u0000
\u0000
\u0000
\u0000
\u0000
\u0000
\u0000
cadena[0]
cadena [1]
cadena [2]
cadena [3]
cadena [4]
cadena [5]
cadena [6]
cadena [7]
Para mostrar el contenido completo del array:
System.out.println(cadena);
Mostrará 8 caracteres nulos (en blanco)

Ejemplo
: Array de 5 caracteres llamado vocales. Se asignan valores iniciales: a, e, i, o, u
char [] vocales = {'a', 'e', 'i', 'o', 'u'};

a
e
i
o
u
vocales[0]
vocales [1]
vocales [2]
vocales [3]
vocales [4]

System.out.println(vocales);
Mostrará:
aeiou
El atributo length de un array de caracteres contiene el tamaño del array independientemente de que sean caracteres nulos u otros caracteres.
Por ejemplo:
char [] cadena = new char[8]; 

\u0000
\u0000
\u0000
\u0000
\u0000
\u0000
\u0000
\u0000
cadena[0]
cadena [1]
cadena [2]
cadena [3]
cadena [4]
cadena [5]
cadena [6]
cadena [7]
System.out.println(cadena.length);
Muestra: 8
cadena[0] ='m';
cadena[1] ='n';

m
n
\u0000
\u0000
\u0000
\u0000
\u0000
\u0000
cadena[0]
cadena [1]
cadena [2]
cadena [3]
cadena [4]
cadena [5]
cadena [6]
cadena [7]
System.out.println(cadena.length);
Muestra: 8
System.out.print(cadena);
System.out.print(cadena);
System.out.println(".");
Mostrará:
mnbbbbbbmnbbbbbb.
Los espacios en blanco se han representado por el carácter b

Se puede asignar un String a un array de caracteres mediante el método toCharArray() de la clase String.
Ejemplo:
String s = "Ordenador";

char [] palabra = s.toCharArray();
Se crea un nuevo array de caracteres con el contenido del String s y se asigna la dirección de memoria a palabra.


Se puede crear un String a partir de un array de caracteres.
Ejemplo:
char [] vocales = {'a', 'e', 'i', 'o', 'u'};







String s = new String(vocales);
Se crea un nuevo String con el contenido del array vocales y se  asigna la dirección de memoria a s.



RECORRER UN ARRAY DE CARACTERES UNIDIMENSIONAL
Se puede recorrer de forma completa utilizando una instrucción iterativa, normalmente un for.
Por ejemplo:
char [] s = new char[10];
s[0]='a';
s[1]='b';
s[2]='c';
for(int i = 0; i<s.length; i++)
     System.out.print(s[i]+ " ");

Mostrará todos los caracteres del array, incluidos los nulos.

Si los caracteres no nulos se encuentran al principio del array se puede recorrer utilizando un while, mientras que no encontremos un carácter nulo.
Por ejemplo:
char [] s = new char[10];
s[0]='a';
s[1]='b';
s[2]='c';
int i = 0;
while(s[i]!='\0'){
        System.out.print(s[i]);
        i++;
}
Muestra los caracteres del array hasta que encuentra el primer nulo.

11 comentarios:

  1. pero no dice como hacer la lectura de un arreglo de caracteres, intenté hacerlo como normalmente lo hago en C++ pero no me funcionó me da error.

    ResponderEliminar
    Respuestas
    1. Puedes leer un String y luego pasarlo a un array de caracteres usando el método toCharArray

      Scanner sc = new Scanner(System.in);
      char [] a;
      System.out.print("Introduce caracteres: ");
      String s = sc.nextLine();
      a = s.toCharArray();
      System.out.println(a);

      Eliminar
  2. Amigo muchas gracias por tu manual, pero quisiera saber como hacer un arreglo de char limitado es decir lo que quiero es que el arreglo tenga un limite de 10 y que el dato de la palabra se lea por teclado, ¿cómo lo hago?

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. como puedo hacer esto??

    Escriba un programa que le pida al usuario una frase y la guarde en un vector, para esto el programa le pide al usuario la cantidad de palabras de la frase, y
    luego le pide palabra por palabra para llenar el vector. Luego el programa debe generar 2 vectores. El primer vector va a guardar las letras iniciales de las
    palabras de la frase y el segundo guarda las letras finales de cada palabra. Finalmente el programa debe intercambiar la letra inicial con la letra final de cada
    palabra, e imprimir los tres vectores: las palabras, las letras iniciales y las letras finales
    vectorPal: hola como esta
    vectorLetraInic h c e
    vectorLetraFin a o a
    VectorPal después de hacer el intercambio: aolh oomc aste

    ResponderEliminar
    Respuestas
    1. Bueno eso es un poco mas complicado... yo pude realizarlo de esta manera, seguro no es la mas eficiente pero alli esta.

      package ejercicios;
      import java.util.Scanner;

      public class LetraInicioFin {
      public static void main(String[] args) {
      Scanner s = new Scanner(System.in);

      System.out.print("Introduzca la cantidad de palabras que contiene la frase: ");
      int n = s.nextInt();
      String[] vectorPalOrig = new String[n];
      char[] letraInicio = new char[n];
      char[] letraFin = new char[n];
      /* Creo un Scanner para leer todos los datos necesarios, leo la cantidad de palabras de la frase
      y creo los 3 arrays necesarios. */
      for (int i = 0; i < n; i++) {
      System.out.print("Introduzca la palabra siguiente: ");
      vectorPalOrig[i] = s.next();
      letraInicio[i] = vectorPalOrig[i].charAt(0);
      letraFin[i] = vectorPalOrig[i].charAt(vectorPalOrig[i].length()-1);
      }
      /* utilizo el for para ya con el numero de palabras de la frase poder introducir las palabras
      una a una en el Array de String, asi como tambien cada letra de las palabras en sus respectivos
      Inicio y Fin Arrays. */
      StringBuilder builderPalOrig = new StringBuilder();
      StringBuilder builderLetraInicio = new StringBuilder();
      StringBuilder builderLetraFin = new StringBuilder();

      for(String y : vectorPalOrig) {
      builderPalOrig.append(y);
      builderPalOrig.append(' ');
      }
      for(char x : letraInicio) {
      builderLetraInicio.append(x);
      builderLetraInicio.append(' ');
      }
      for(char z : letraFin) {
      builderLetraFin.append(z);
      builderLetraFin.append(' ');
      }
      System.out.println("\n"+"Frase Inicial: "+builderPalOrig.toString()+"\n");
      System.out.println("Letras Iniciales de las palabras: "+builderLetraInicio.toString());
      System.out.println("Letras finales de las palabras: "+builderLetraFin.toString());
      /* Cree StringBuilders para los 3 Arrays ya que, el metodo toString en Array solo me devuelve su
      posicion en memoria, y para pasar de array de caracteres a String hace falta crear un StringBuilder.
      Tambien utilice los foreach para buscar en los arrays y llenar los StringBuilders imprimiendo los
      resultados. */
      for (int i = 0; i < n; i++) {
      char[] VPO = vectorPalOrig[i].toCharArray();
      VPO[0] = letraFin[i];
      VPO[vectorPalOrig[i].length()-1] = letraInicio[i];
      StringBuilder builder = new StringBuilder();
      for(char x : VPO) {
      builder.append(x);
      }
      vectorPalOrig[i] = builder.toString();
      }
      /* Utilize otro for normal para crear las n veces un Array de char inicializandolo con la
      palabra de turno y el metodo .toCharArray() y asi poder modificar efectivamente las letras
      inicial y final de cada palabra, (hay un metodo para String llamado .replace el cual reemplaza)
      todas las letras por otra [a, e], no me servia porque reemplazaria cada coincidencia encontrada).
      Visto que la palabra modificada esta en formato char[] tuve que creear otro StringBuilder dentro del for
      para reemplazar la palabra inicial con la modificada.
      */
      StringBuilder builderPalMod = new StringBuilder();
      for(String palabras : vectorPalOrig) {
      builderPalMod.append(palabras);
      builderPalMod.append(' ');
      }

      System.out.println("\n"+"Frase Modificada: "+builderPalMod.toString());
      /* Por ultimo cree otro StringBuilder para entrar en el Array de palabras ya modificadas de la frase y
      poder pasarlas a un solo String con sus espacios incluidos, e imprimir el resultado final.
      */
      }


      }

      Eliminar
  5. No entendi nada me dan clases personales

    ResponderEliminar
  6. Hola disculpen como puedo comparar un dato con todos los datos de un arreglo en Java:
    este arrglo lo quiero comparar:

    char letras [] ={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','ñ','o','p','q','r','s','t','u','v','w','x','y','z'};

    con:

    String cadena = "e";

    es para un analizador lexico o automata en java se los agradeceria gracias!!!

    ResponderEliminar
    Respuestas
    1. Hola espero que te ayude, esta es la manera mas simple para comparar datos. te dejo un lexer abajo para que lo cheques.


      char[] letras = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','ñ','o','p','q','r','s','t','u','v','w','x','y','z'};
      String s = "e";
      for (int i = 0; i < letras.length; i++) {
      if(s.charAt(0)==letras[i]){
      System.out.println("YES");

      http://www.lawebdelprogramador.com/codigo/Java/1577-Analizador-Lexico.html

      Eliminar
  7. como puedo hacer esto?
    declarar un arreglo de tipo cadena de caracteres de "n" posiciones que se pidan por el teclado, obtener por teclado los datos para llenar el arreglo y el programa deberá generar un segundo arreglo con los elementos del primer arreglo que tengan una cantidad de caracteres par

    ResponderEliminar