web-dev-qa-db-fra.com

Conversion de chaîne en tableau "Caractère" dans Java

Je souhaite convertir un String en un tableau d'objets de la classe Caractère , mais je suis incapable d'effectuer la conversion. Je sais que je peux convertir une chaîne en un tableau de type de données primitif de type "char" avec la méthode toCharArray(), mais la conversion d'une chaîne en un tableau d'objets = n'aide à rien. type.

Comment pourrais-je m'y prendre?

99
kgd

Utilisez ceci:

String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);
169
Kuldeep Jain

Une doublure avec 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); 

Qu'est-ce qu'il fait est:

  • obtenir un IntStream des caractères (vous pouvez aussi regarder aussi codePoints())
  • mappez chaque valeur de caractère à Character (vous devez utiliser le transtypage pour dire que c'est vraiment un char, puis Java le placera automatiquement dans Character)
  • obtenir le tableau résultant en appelant toArray()
58
Alexis C.

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
Alvin

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

Cela fonctionne et le résultat 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
JDGuide

Cette méthode prend String en 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
loknath

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

2
Chandra Sekhar

String#toCharArray renvoie un tableau de char, ce que vous avez est un tableau de Character. Dans la plupart des cas, peu importe que vous utilisiez char ou Character comme il en existe sélection automatique . Le problème dans votre cas est que les tableaux ne sont pas auto-sélectionnés, je vous suggère d'utiliser un tableau de caractères (char[]).

2
Sandro

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

Si vous ne souhaitez pas vous fier aux API tierces, voici un code fonctionnel pour JDK7 ou version ultérieure. Je n'instancie pas d'objets de caractère temporaires comme le font les solutions ci-dessus. les boucles sont plus lisibles, voyez-vous :)

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
realPK

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

En cours d'exécution, cela vous donne la sortie:

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

le chaînage est toujours le meilleur: D

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

Conversion de chaîne en tableau de caractères, puis conversion du tableau de caractères en chaîne

   //Givent String
   String given = "asdcbsdcagfsdbgdfanfghbsfdab";

   //Converting String to Character Array(It's an inbuild method of a String)
   char[] characterArray = given.toCharArray();
   //returns = [a, s, d, c, b, s, d, c, a, g, f, s, d, b, g, d, f, a, n, f, g, h, b, s, f, d, a, b]


  //Converting back Character array to String
  int length = Arrays.toString(characterArray).replaceAll("[, ]","").length();

  //First Way to get the string back
  Arrays.toString(characterArray).replaceAll("[, ]","").substring(1,length-1)
  //returns asdcbsdcagfsdbgdfanfghbsfdab
  or 
  // Second way to get the string back
  Arrays.toString(characterArray).replaceAll("[, ]","").replace("[","").replace("]",""))
 //returns asdcbsdcagfsdbgdfanfghbsfdab
0
Arpan Saini

si vous travaillez avec JTextField, alors cela 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
M.Shams Tabrez