2012-04-04 20 views
88

Quiero convertir un String en 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 primitivos "char" con el método toCharArray(), pero no ayuda a convertir una Cadena en una matriz de objetos del tipo Character.Conversión de cadena a matriz "Carácter" en Java

¿Cómo podría hacerlo?

+5

¿Qué quiere decir con "no encaja con la matriz de caracteres"? – barsju

+0

¿Puedes volver a escribir esto o articular un poco más, o tal vez proporcionar un ejemplo de código? – blackcompe

+0

Para convertir 'char' a' Character', use 'Character.valueOf (mychar)'. Si se trata de una matriz, repita cada elemento y conviértalo. –

Respuesta

155

Utilice esta:

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

¡Deseo que ArrayUtils sea estándar en las JVM! – Alvin

2

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

32

Por qué no escribir un método poco a sí 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++) { 
     array[i] = new Character(s.charAt(i)); 
    } 

    return array; 
} 
+6

+1 para Character [] array = new Characer [s.length()]; – Ankit

+0

Demasiados objetos de caracteres se crearán instancias si es una cadena enorme. – realPK

+1

¿Por qué no escribir un pequeño método usted mismo? Debido a que 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 la confiabilidad de esa función, que lo que se puede copiar/pegar de una publicación de stackoverflow. – HoldOffHunger

2

String#toCharArray devuelve una matriz de char, lo que tienes es una matriz de Character. En la mayoría de los casos, no importa si usa char o Character ya que hay autoboxing. El problema en su caso es que las matrices no están autoboxadas, le sugiero que use una matriz de caracteres (char[]).

1

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

Espero que el siguiente código lo 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 la salida 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 
+2

Esto no es para nada lo que el OP estaba pidiendo. – Qix

0

si se está trabajando con JTextField, entonces puede ser atento ..

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

encadenamiento siempre es mejor: D

String str = "somethingPutHere"; 
Character[] c = ArrayUtils.toObject(str.toCharArray()); 
+0

'encadenamiento siempre es mejor' Falso. – Qix

+0

ArrayUtils no es parte del JDK. – mbmast

2

Este método toma a String como argumento y devolver el array 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; 
} 
39

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 una IntStream de los personajes (es posible que desee considerar también codePoints())
  • mapean cada valor de "carácter" a Character (necesita lanzar para decir realmente que es realmente un char, y luego de Java se casilla automáticamente a Character)
  • obtener la matriz resultante llamando toArray()
0

Si no quiere depender de terceros de la API del partido, aquí es un código de trabajo para JDK7 o abajo.No estoy instanciando objetos de carácter temporales como lo hicieron otras soluciones anteriores. foreach son más legibles, verse a sí 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 la claseStringReader en java.io. Una de sus funciones read(char[] cbuf) lee los contenidos 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]); 
} 

La ejecución de este le da la salida:

array[0] = h 
array[1] = e 
array[2] = l 
array[3] = l 
array[4] = o 
Cuestiones relacionadas