2012-04-04 18 views
88

Desidero convertire un String in una matrice di oggetti della classe Character ma non riesco a eseguire la conversione. So che posso convertire una stringa in una matrice di tipo di dati primitivo "char" con il metodo toCharArray() ma non aiuta a convertire una stringa in una matrice di oggetti di tipo Character.Conversione di stringhe nell'array "Character" in Java

Come potrei fare?

+5

Che cosa si intende per "non si adatta con l'array di caratteri"? – barsju

+0

Puoi riformulare questo o articolare un po 'di più, o magari fornire un esempio di codice? – blackcompe

+0

Per convertire 'char' in' Character', usare 'Character.valueOf (mychar)'. Se è un array, loop ogni elemento e convertire. –

risposta

155

Utilizzare questa:

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

Desidero che ArrayUtils sia standard in JVM! – Alvin

2

In questo caso è necessario scrivere il proprio metodo. Usa un loop e ottieni ciascun carattere usando charAt(i) e impostalo sull'array Character[] utilizzando arrayname[i] = string.charAt[i].

32

perché non scrivere un metodo poco te

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 per Character [] array = new Characer [s.length()]; – Ankit

+0

Viene creato un numero eccessivo di oggetti carattere se è una stringa enorme. – realPK

+1

Perché non scrivere da solo un piccolo metodo? Perché esiste già un metodo (toCharArray()), e il metodo che già esiste ha molti più ingegneri dedicati e interessati a garantire le prestazioni e l'affidabilità di quella funzione, rispetto a ciò che può essere copiato/incollato da un post StackOverflow. – HoldOffHunger

2

String#toCharArray restituisce un array di char, quello che hai è un array di Character. Nella maggior parte dei casi non importa se usi char o Character dato che c'è autoboxing. Il problema nel tuo caso è che gli array non sono autoboxed, ti suggerisco di usare un array di caratteri (char[]).

1

un altro modo per farlo.

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

Spero che il codice qui sotto ti possa aiutare.

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

E 'di lavoro e l'uscita è:

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

Questo non è affatto ciò che l'OP chiedeva. – Qix

0

se si sta lavorando con JTextField allora può essere utile ..

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

concatenamento è sempre meglio: D

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

Il concatenamento è sempre il migliore. Falso. – Qix

+0

ArrayUtils non fa parte del JDK. – mbmast

2

Questo metodo accetta String come argomento e restituire l'array di caratteri

/** 
* @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

uno di linea 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); 

Ciò che fa è:

  • ottenere un IntStream dei personaggi (si consiglia di guardare anche codePoints())
  • mappa ogni valore di 'carattere' su Character (è necessario eseguire il cast per effettivamente dire che la sua davvero un char, e poi Java sarà casella automaticamente a Character)
  • ottenere la matrice risultante chiamando toArray()
0

Se non si vuole fare affidamento su terze API parti di, ecco un codice di lavoro per JDK7 o inferiore.Non sto creando istanze di oggetti temporanei come fanno altre soluzioni sopra. loop foreach sono più leggibili, vedere voi stessi :)

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

ho usato la classe StringReader in java.io. Una delle sue funzioni read(char[] cbuf) legge i contenuti di una stringa in una matrice.

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

L'esecuzione di questo ti dà l'output:

array[0] = h 
array[1] = e 
array[2] = l 
array[3] = l 
array[4] = o 
Problemi correlati