Arrays de caracteres en Java

Un array de caracteres es un array unidimensional 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.

Ejemplo: Array de 8 caracteres llamado cadena.
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]
Por defecto los elementos del array se inicializan con el carácter nulo (carácter \u0000 Unicode).
A diferencia de los demás arrays, se puede mostrar el contenido completo de un array de caracteres mediante una sola instrucción print, println o printf.
Para mostrar el contenido completo del array de caracteres:
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


ASIGNAR UN STRING A UN ARRAY DE CARACTERES
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.


CREAR UN STRING A PARTIR DE ARRAY DE CARACTERES
Se puede crear un String a partir de un array de caracteres utilizando el constructor de la clase String.
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
Un array de caracteres Java 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.

28 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. Una pregunta, y como se hace la paquetería import java.io.*;
      Al parecer tengo problemas porque lo intente poner como es, pero me cuando estoy introduciendo el arreglo char me brinca espacios del arreglo. Ayuda

      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
  8. Hola Disculpen, tengo problema con un ejercicio me pide mostrar la mitad de un cadena en mayúsculas y la otra en Minúsculas. Lo intento con Arreglos pero aun no puedo aclarar mi idea

    ResponderEliminar
  9. vector 1= [b e c w d f y g h a i j t k m ñ p n q r s u v l x z o -]

    teniendo en cuenta el vector anterior resuelva los siguientes ejercicios

    1) dado el siguiente vector [9,23,7,26,19,10,12,14,26,20] proceda a buscar los valores de cada posición en el vector1 y finalmente obtendrá un vector resultante con una frase o palabra.

    ResponderEliminar
  10. como puedo hacer un programa que compare celulares

    ResponderEliminar
  11. Desarrollar un Programa Java que permita ingresar en una cadena (Arrays) de 10 elementos (cada elemento es una letra), se pide enviar a otra Arrays solo los caracteres que sean vocales.

    ResponderEliminar
  12. como puedo realizar un programa en Java donde se inserte números y operadores por ejemplo +34*82 y los ordene de manera que en la misma cadena se muestren primero los operadores ordenados y después los números tal cual se insertaron?

    ResponderEliminar
  13. Hola! tengo una pregunta. Como puedo hacer un vector doble (bidimensional) usando frases. Es decir, si escribo "que vivia un hidalgo", esa frase se haga como vector. Quedaria algo asi

    q u e v i
    v i a u n
    h i d a l
    etc

    ResponderEliminar
  14. ¿De qué forma puedo saber si una palabra tiene exactamente las mismas letras que otra palabra?
    En este caso me dieron 2 palabras ya definida
    char[] vector1 = { 'c', 'a', 's', 'a' };
    char[] vector2 = { 's', 'a', 'c', 'a' };
    Se quiere saber si las 2 palabras tienen las mismas letras

    ResponderEliminar
    Respuestas
    1. Hola, te paso el código que se me ocurrió a mí. No estoy seguro que sea el más eficiente del mundo, pero funciona. El código comprueba que haya las mismas letras y cantidades en cada vector. Por ejemplo, si el vector1 es {'a', 'b', 'b'} y el vector2 es {'a', 'a', 'b'}, el resultado va a ser que no son iguales, ya que si bien son las mismas letras, no son las mismas cantidades.

      public static void main(String[] args) {

      ____char[] vector1 = { 'c', 'a', 's', 'a'}; //Vector 1 de caracteres
      ____char[] vector2 = { 's', 'a', 'c', 'a'}; //Vector 2 de caracteres
      ____boolean vectoresIguales = true; //Variable para indicar si los vectores son o no iguales (exactamente las mismas letras)

      ____for(int i = 0 ; i < vector1.length ; i++) {

      ________int cantidadLetraVector1 = 0; //Variable para contar las veces que se repite una misma letra en el vector1
      ________int cantidadLetraVector2 = 0; //Variable para contar las veces que se encuentra la letra en el vector2

      ________//Se cuenta cuantas veces se repite la misma letra en el vector1
      ________for(int j = 0 ; j < vector1.length ; j++) {
      ____________if(vector1[i] == vector1[j]) {
      ________________cantidadLetraVector1++;
      ____________}
      ________}

      ________//Se cuenta cuantas veces está la letra del vector1 en el vector2
      ________for(int k = 0 ; k < vector2.length ; k++) {
      ____________if(vector1[i] == vector2[k]) {
      ________________cantidadLetraVector2++;
      ____________}
      ________}

      ________//Se compara que la letra esté las mismas veces en cada vector
      ________if(cantidadLetraVector1 != cantidadLetraVector2) {
      ____________vectoresIguales = false;
      ________}

      ____}

      ____//Se comprueba que en los dos vectores haya la misma cantidad de letras
      ____//Ya que puede pasar que el vector2 tenga una (o más) letras que el vector1
      ____if(vector1.length != vector2.length) {
      ________vectoresIguales = false;
      ____}

      ____if(vectoresIguales) {
      ________System.out.println("Los vectores tienen las mismas letras");
      ____} else {
      ________System.out.println("Los vectores tienen letras diferentes");
      ____}

      }

      Eliminar
    2. Muchas gracias amigo si tambien hice algo parecido pero en mi caso fue mas de contar las letras de cada palabra con un contador pero la verdad tu programa me parece mucho mas correcto concretamente con lo que solicita

      Eliminar
  15. Ayuda como le puedo hacer para desarrollar un programa en java que solicite 10 dígitos desde teclado que pueden ser números, letras o caracteres especiales y los ordene de acuerdo al código ASCII. Muestre como resultado el ordenamiento de dichos caracteres.

    ResponderEliminar
  16. Crear un arreglo con letras del alfabeto y mostrar las que son vocales y en que posición están

    alguien me ayuda con esto porfavor

    ResponderEliminar
  17. Hola alquen me puede ayudar porfavor
    Crear un programa en C#, que solicite al usuario ingresar un
    carácter, e indicar si dicho carácter es un símbolo, una letra o
    un número.

    ResponderEliminar
  18. alguien me puede ayudar? Realizar un programa que simule la gestión del despachador del sistema operativo realizando la transición entre los estados nuevo-espera-ejecución-terminado, utilizando atención tipo fifo, primero en llegar primero en ser atendido. Los procesos deben ser creados aleatoriamente con un tamaño y un tiempo de ejecución también aleatorio. Debe mostrar el funcionamiento desde el momento en que se crean los procesos hasta que terminan su ejecución. El tiempo de ejecución de cada proceso debe ser entre 15 y 40 segundos en múltiplos de 5. Atender una lista de máximo 10 procesos. Cuando la lista este llena, debe rechazar el proceso creado. colocándolo en una lista de rechazados Al terminar, el programa debe mostrar el estado final de los procesos en espera, ejecución, terminados y rechazados.

    ResponderEliminar
  19. alguien sabe como puedo hacer un programa donde se realizen 3 arreglos de tipo caracter: los primeros 2 con longitud de 5 el ultimo con longitud de 10. el tercero se llenara automaticamente con los valores de los primeros 2.

    ResponderEliminar