2012-04-04 15 views
88

Chcę przekonwertować obiekt String na tablicę obiektów klasy Character, ale nie mogę przeprowadzić konwersji. Wiem, że mogę przekonwertować ciąg na tablicę prymitywnego typu danych "char" za pomocą metody toCharArray(), ale nie pomaga ona w przekonwertowaniu ciągu znaków na tablicę obiektów typu Character.Konwersja łańcucha znaków na tablicę "Character" w języku Java

Jak miałbym to zrobić?

+5

Co masz na myśli mówiąc "nie pasuje do tablicy znaków"? – barsju

+0

Czy możesz powtórzyć to słowo lub wyartykułować coś więcej, lub może podać przykład kodu? – blackcompe

+0

Aby przekształcić 'char' na' Character', użyj 'Character.valueOf (mychar)'. Jeśli jest to tablica, zapętlaj każdy element i konwertuj. –

Odpowiedz

155

Użyj tego:

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

Chciałbym, aby ArrayUtils był standardem w maszynach JVM! – Alvin

2

Musisz napisać własną metodę w tym przypadku. Użyj pętli i pobierz każdy znak za pomocą charAt(i) i ustaw go na tablicę Character[] przy użyciu arrayname[i] = string.charAt[i].

32

Dlaczego nie napisać trochę metodę bardziej

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

+0

Zbyt wiele obiektów znaków zostanie utworzonych, jeśli będzie to ogromny ciąg. – realPK

+1

Dlaczego sam nie napisać trochę metody? Ponieważ metoda już istnieje (toCharArray()), a metoda, która już istnieje, ma znacznie więcej inżynierów poświęconych i zainteresowanych gwarancją wydajności i niezawodności tej funkcji, niż to, co może być skopiowane/wklejone z postu stackoverflow. – HoldOffHunger

2

String#toCharArray zwraca tablicę char, co masz jest tablicą Character. W większości przypadków nie ma znaczenia, czy używasz char lub Character, ponieważ istnieje autoboxing. Problem w twoim przypadku polega na tym, że tablice nie są autoboxowane, sugeruję użycie tablicy char (char[]).

1

inny sposób na zrobienie tego.

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

Mam nadzieję, że poniższy kod pomoże ci.

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

To działa, a wyjście jest:

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

To wcale nie jest to, o co prosił OP. – Qix

0

jeśli pracujesz z JTextField to może być pomocny ..

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

łańcuchowym jest zawsze najlepsze: D

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

'łańcuchowanie jest zawsze najlepsze' Fałsz. – Qix

+0

ArrayUtils nie jest częścią JDK. – mbmast

2

Ta metoda pobiera ciąg jako argument i zwróci tablicy znaków

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

One liner z :

String str = "testString"; 

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

Co robi jest:

  • uzyskać IntStream bohaterów (może warto też spojrzeć na codePoints())
  • zamapuj każdą wartość "znaku" na Character (musisz rzucić, aby rzeczywiście powiedzieć, że Jej naprawdę char, a następnie Java będzie to pole automatycznie Character)
  • uzyskać wynikowy tablicę wywołując toArray()
0

Jeśli nie chcesz polegać na trzecim API partii, tutaj jest kod roboczych dla JDK7 lub mniej.Nie tworzę tymczasowych obiektów znaków, jak to robią inne rozwiązania powyżej. pętla foreach są bardziej czytelne, zobaczyć siebie :)

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

użyłem StringReader klasę w java.io. Jedna z jego funkcji odczytuje zawartość ciągu do tablicy.

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

Running to daje wynik:

array[0] = h 
array[1] = e 
array[2] = l 
array[3] = l 
array[4] = o 
Powiązane problemy