Conversión de cadenas en una matriz de "caracteres" en Java


108

Quiero convertir una Stringa una matriz de objetos de la clase Character pero no puedo realizar la conversión. Sé que puedo convertir una Cadena en una matriz de tipo de datos primitivo "char" con el toCharArray()método, pero no ayuda a convertir una Cadena en una matriz de objetos de tipo Carácter .

¿Cómo lo haría?


6
¿Qué quieres decir con "no encaja con la matriz de caracteres"?
Barsju

¿Puede reformular esto o articular un poco más, o tal vez proporcionar un ejemplo de código?
blackcompe

Para convertir chara Character, use Character.valueOf(mychar). Si es una matriz, repita cada elemento y conviértalo.
ee.

java necesita una función de mapa, expresiones lambda.
Eric Hartford

Respuestas:


184

Utilizar este:

String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);

27
¡Ojalá ArrayUtils sea estándar en las JVM!
Alvin

4
ArrayUtilses de commons-lang, no de JDK, ¿verdad?
Eric Wang

66

Un revestimiento con :

String str = "testString";

//[t, e, s, t, S, t, r, i, n, g]
Character[] charObjectArray = 
    str.chars().mapToObj(c -> (char)c).toArray(Character[]::new); 

Lo que hace es:

  • obtener uno IntStreamde los personajes (es posible que desee mirar también codePoints())
  • mapear cada valor de 'carácter' a Character(debe lanzar para decir realmente que es realmente a char, y luego Java lo encasillará automáticamente Character)
  • obtener la matriz resultante llamando toArray()

33

¿Por qué no escribes un pequeño método tú mismo?

public Character[] toCharacterArray( String s ) {

   if ( s == null ) {
     return null;
   }

   int len = s.length();
   Character[] array = new Character[len];
   for (int i = 0; i < len ; i++) {
      /* 
      Character(char) is deprecated since Java SE 9 & JDK 9
      Link: https://docs.oracle.com/javase/9/docs/api/java/lang/Character.html
      array[i] = new Character(s.charAt(i));
      */
      array[i] = s.charAt(i);
   }

   return array;
}

Demasiados objetos de carácter serán instanciados si es una cadena enorme.
realPK

2
¿Por qué no escribes un pequeño método tú mismo? Porque ya existe un método (toCharArray ()), y el método que ya existe tiene muchos más ingenieros dedicados e interesados ​​en garantizar el rendimiento y confiabilidad de esa función, que lo que se puede copiar / pegar desde una publicación de stackoverflow.
HoldOffHunger

1
@HoldOffHunger Tienes toda la razón. Sin embargo, toCharArray () devuelve el tipo primitivo de matriz en lugar del objeto Character según lo necesite OP. Claro, puede recorrer el char [] nuevamente para convertirlo en Character []. Pero, recorrer un anuncio de cadena que crea un objeto Character es tan simple que no veo por qué no simplemente lanzar el suyo si no desea traer una biblioteca de terceros.
Alvin

6

Espero que el siguiente código te ayude.

String s="Welcome to Java Programming";
char arr[]=s.toCharArray();
for(int i=0;i<arr.length;i++){
    System.out.println("Data at ["+i+"]="+arr[i]);
}

Está funcionando y el resultado es:

Data at [0]=W
Data at [1]=e
Data at [2]=l
Data at [3]=c
Data at [4]=o
Data at [5]=m
Data at [6]=e
Data at [7]= 
Data at [8]=t
Data at [9]=o
Data at [10]= 
Data at [11]=J
Data at [12]=a
Data at [13]=v
Data at [14]=a
Data at [15]= 
Data at [16]=P
Data at [17]=r
Data at [18]=o
Data at [19]=g
Data at [20]=r
Data at [21]=a
Data at [22]=m
Data at [23]=m
Data at [24]=i
Data at [25]=n
Data at [26]=g

4
Esto no es en absoluto lo que pedía el OP.
Qix - MONICA FUE MALTRATADA

3

String#toCharArraydevuelve una matriz de char, lo que tiene es una matriz de Character. En la mayoría de los casos, no importa si usa charo Characterya que hay autoboxing . El problema en su caso es que las matrices no se encuadran automáticamente, le sugiero que use una matriz de char ( char[]).


2

Tienes que escribir tu propio método en este caso. Use un bucle y obtenga cada carácter usando charAt(i)y configúrelo en su Character[]matriz usando arrayname[i] = string.charAt[i].


2

Este método toma String como argumento y devuelve la matriz de caracteres

/**
 * @param sourceString
 *            :String as argument
 * @return CharcterArray
 */
public static Character[] toCharacterArray(String sourceString) {
    char[] charArrays = new char[sourceString.length()];
    charArrays = sourceString.toCharArray();
    Character[] characterArray = new Character[charArrays.length];
    for (int i = 0; i < charArrays.length; i++) {
        characterArray[i] = charArrays[i];
    }
    return characterArray;
}

1

otra forma de hacerlo.

String str="I am a good boy";
    char[] chars=str.toCharArray();

    Character[] characters=new Character[chars.length];
    for (int i = 0; i < chars.length; i++) {
        characters[i]=chars[i];
        System.out.println(chars[i]);
    }

1

Conversión de cadena en matriz de caracteres y luego conversión de matriz de caracteres nuevamente en cadena

   //Givent String
   String given = "asdcbsdcagfsdbgdfanfghbsfdab";

   //Converting String to Character Array(It's an inbuild method of a String)
   char[] characterArray = given.toCharArray();
   //returns = [a, s, d, c, b, s, d, c, a, g, f, s, d, b, g, d, f, a, n, f, g, h, b, s, f, d, a, b]

// ONE WAY: Conversión de la matriz de caracteres a String

  int length = Arrays.toString(characterArray).replaceAll("[, ]","").length();

  //First Way to get the string back
  Arrays.toString(characterArray).replaceAll("[, ]","").substring(1,length-1)
  //returns asdcbsdcagfsdbgdfanfghbsfdab
  or 
  // Second way to get the string back
  Arrays.toString(characterArray).replaceAll("[, ]","").replace("[","").replace("]",""))
 //returns asdcbsdcagfsdbgdfanfghbsfdab

// Segunda MANERA: Conversión de la matriz de caracteres a String

String.valueOf(characterArray);

// Tercera MANERA: Conversión de la matriz de caracteres a una cadena

Arrays.stream(characterArray)
           .mapToObj(i -> (char)i)
           .collect(Collectors.joining());

Conversión de cadena en matriz de caracteres

Character[] charObjectArray =
                           givenString.chars().
                               mapToObj(c -> (char)c).
                               toArray(Character[]::new);

Conversión de matriz de caracteres a matriz de caracteres

 String givenString = "MyNameIsArpan";
char[] givenchararray = givenString.toCharArray();


     String.valueOf(givenchararray).chars().mapToObj(c -> 
                         (char)c).toArray(Character[]::new);

Beneficios de convertir char Array en Character Array, puede usar la función Arrays.stream para obtener el subarreglo

String subStringFromCharacterArray = 

              Arrays.stream(charObjectArray,2,6).
                          map(String::valueOf).
                          collect(Collectors.joining());

0

si está trabajando con JTextField, entonces puede ser útil.

public JTextField display;
String number=e.getActionCommand();

display.setText(display.getText()+number);

ch=number.toCharArray();
for( int i=0; i<ch.length; i++)
    System.out.println("in array a1= "+ch[i]);


0

Si no desea depender de API de terceros, aquí hay un código de trabajo para JDK7 o inferior. No estoy creando instancias de objetos de carácter temporales como lo hicieron otras soluciones anteriores. los bucles foreach son más legibles, mírate a ti mismo :)

public static Character[] convertStringToCharacterArray(String str) {
    if (str == null || str.isEmpty()) {
        return null;
    }
    char[] c = str.toCharArray();
    final int len = c.length;
    int counter = 0;
    final Character[] result = new Character[len];
    while (len > counter) {
        for (char ch : c) {
            result[counter++] = ch;
        }
    }
    return result;
}

0

He utilizado el StringReader clase en java.io . Una de sus funciones read(char[] cbuf)lee el contenido de una cadena en una matriz.

String str = "hello";
char[] array = new char[str.length()];
StringReader read = new StringReader(str);

try {
    read.read(array); //Reads string into the array. Throws IOException
} catch (IOException e) {
    e.printStackTrace();
}

for (int i = 0; i < str.length(); i++) {
        System.out.println("array["+i+"] = "+array[i]);
}

Ejecutar esto le da la salida:

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.