Konwersja łańcucha znaków do tablicy "Character" w Javie

Chcę przekonwertować String Na tablicę obiektów klasy znak, ale nie jestem w stanie wykonać konwersji. Wiem, że mogę przekonwertować Łańcuch do tablicy prymitywnego typu danych "char" metodą toCharArray(), ale nie pomaga to w przekonwertowaniu łańcucha do tablicy obiektów typu znak .

Jak mam to zrobić?
Author: kgd, 2012-04-04

12 answers

Użyj tego:

String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);
 160
Author: Kuldeep Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-29 22:45:42

One liner with java-8:

String str = "testString";

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

To co robi to:

  • uzyskaj IntStream znaków (możesz również spojrzeć na codePoints())
  • odwzoruj każdą wartość 'znaku' na Character (musisz rzucić, aby faktycznie powiedzieć, że jej naprawdę a char, a następnie Java automatycznie poleci ją na Character)
  • uzyskaj tablicę wynikową przez wywołanie toArray()
 42
Author: Alexis C.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-20 19:57:55

Dlaczego sam nie napiszesz małej metody

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;
}
 32
Author: Alvin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-12 09:54:33

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

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

Działa, a wyjście to:

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
 5
Author: xxxxxxxx d,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-04 09:35:04

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

 2
Author: Sandro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-04 09:33:26

Musisz napisać własną metodę w tym przypadku. Użyj pętli i uzyskaj każdy znak za pomocą {[0] } i ustaw go na tablicę Character[] za pomocą arrayname[i] = string.charAt[i].

 2
Author: Chandra Sekhar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-04 09:33:52

Ta metoda przyjmuje Łańcuch znaków jako argument i zwraca tablicę 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;
}
 2
Author: loknath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-08 04:49:33

Inny sposób.

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
Author: Balaswamy Vaddeman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-04 06:56:51

Jeśli pracujesz z JTextField, może to być pomocne..

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
Author: M.Shams Tabrez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-28 02:07:16

Chowanie jest zawsze najlepsze: D

String str = "somethingPutHere";
Character[] c = ArrayUtils.toObject(str.toCharArray());
 0
Author: ak_2050,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-18 21:18:25

Jeśli nie chcesz polegać na zewnętrznych API, oto działający kod dla JDK7 lub poniżej. Nie inicjuję tymczasowych obiektów znakowych, jak to robią inne rozwiązania powyżej. pętle foreach są bardziej czytelne, zobacz Sam :)

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
Author: realPK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-27 08:24:08

Użyłem klasy StringReader W java.io . jedna z funkcji read(char[] cbuf) odczytuje zawartość łańcucha znaków 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]);
}

Uruchomienie tego daje wyjście:

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
 0
Author: TheBro21,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-29 15:43:02