Conversion D'une chaîne en tableau "caractère" en Java

je veux convertir un String en un tableau d'objets de la classe caractère mais je ne suis pas en mesure d'effectuer la conversion. Je sais que je peux convertir une chaîne de caractères en un tableau de type primitif "char" avec la méthode toCharArray() mais cela n'aide pas à convertir une chaîne de caractères en un tableau d'objets de type ".

Comment faire?

94
demandé sur kgd 2012-04-04 10:46:48

12 réponses

utilisez ceci:

String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);
160
répondu Kuldeep Jain 2014-01-29 22:45:42

Un paquebot avec :

String str = "testString";

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

Ce qu'il fait est:

  • obtenir un IntStream des personnages (vous pouvez aussi regarder codePoints() )
  • mappez chaque valeur de "caractère" à Character (vous devez mouler pour réellement dire que son vraiment un char , puis Java le boxera automatiquement à Character )
  • obtenir le tableau résultant en appelant toArray()
42
répondu Alexis C. 2016-07-20 19:57:55

pourquoi ne pas écrire une petite méthode vous-même

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
répondu Alvin 2014-08-12 09:54:33

j'espère que le code ci-dessous vous aidera.

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

ça marche et la sortie est:

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
répondu xxxxxxxx d 2012-04-04 09:35:04

String#toCharArray retourne un tableau de char , ce que vous avez est un tableau de Character . Dans la plupart des cas, cela n'a pas d'importance si vous utilisez char ou Character comme il ya autoboxing . Le problème dans votre cas est que les tableaux ne sont pas autoboxed, je vous suggère d'utiliser un tableau de char ( char[] ).

2
répondu Sandro 2012-04-04 09:33:26

Vous devez écrire votre propre méthode dans ce cas. Utilisez une boucle et obtenez chaque caractère en utilisant charAt(i) et mettez-le à votre tableau Character[] en utilisant arrayname[i] = string.charAt[i] .

2
répondu Chandra Sekhar 2012-04-04 09:33:52

cette méthode prend la chaîne de caractères comme argument et renvoie le tableau de caractères

/**
 * @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
répondu loknath 2014-05-08 04:49:33

une autre façon de le faire.

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
répondu Balaswamy Vaddeman 2012-04-04 06:56:51

si vous travaillez avec JTextField alors il peut être 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
répondu M.Shams Tabrez 2013-10-28 02:07:16

l'enchaînement est toujours préférable: d

String str = "somethingPutHere";
Character[] c = ArrayUtils.toObject(str.toCharArray());
0
répondu ak_2050 2013-12-18 21:18:25

si vous ne voulez pas vous fier aux API de tiers, voici un code de travail pour JDK7 ou moins. Je n'instancie pas des objets de caractères temporaires comme le font les autres solutions ci-dessus. les boucles foreach sont plus lisibles, voyez vous-mêmes :)

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
répondu realPK 2016-06-27 08:24:08

j'ai utilisé la classe StringReader dans java.io . Une de ses fonctions read(char[] cbuf) lit le contenu d'une chaîne dans un tableau.

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

cette exécution vous donne la sortie:

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
0
répondu TheBro21 2016-08-29 15:43:02