Conversion d'une chaîne en tableau «Character» en Java

108

Je souhaite convertir un Stringen un tableau d'objets de la classe Character mais je ne parviens pas à effectuer la conversion. Je sais que je peux convertir une chaîne en un tableau de type de données primitif "char" avec la toCharArray()méthode, mais cela n'aide pas à convertir une chaîne en un tableau d'objets de type caractère .

Comment pourrais-je procéder?

kgd
la source
6
Qu'entendez-vous par "ne correspond pas au tableau de caractères"?
barsju
Pouvez-vous reformuler ceci ou articuler un peu plus, ou peut-être fournir un exemple de code?
blackcompe
Pour convertir charen Character, utilisez Character.valueOf(mychar). S'il s'agit d'un tableau, bouclez chaque élément et convertissez.
ee.
java a besoin d'une fonction de carte, d'expressions lambda.
Eric Hartford

Réponses:

185

Utilisez ceci:

String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);
Kuldeep Jain
la source
27
Je souhaite qu'ArrayUtils soit standard dans les JVM!
Alvin
4
ArrayUtilsest de commons-lang, pas JDK, non?
Eric Wang
66

Une doublure 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 c'est:

  • obtenir un IntStreamdes personnages (vous voudrez peut-être aussi regarder codePoints())
  • mappez chaque valeur de `` caractère '' à Character(vous devez effectuer un cast pour dire que c'est vraiment un char, et Java le boxera automatiquement Character)
  • obtenir le tableau résultant en appelant toArray()
Alexis C.
la source
33

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

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++) {
      /* 
      Character(char) is deprecated since Java SE 9 & JDK 9
      Link: https://docs.oracle.com/javase/9/docs/api/java/lang/Character.html
      array[i] = new Character(s.charAt(i));
      */
      array[i] = s.charAt(i);
   }

   return array;
}
Alvin
la source
Trop d'objets caractère seront instanciés s'il s'agit d'une chaîne énorme.
realPK
2
Pourquoi ne pas écrire vous-même une petite méthode? Parce qu'une méthode existe déjà (toCharArray ()), et que la méthode qui existe déjà a beaucoup plus d'ingénieurs consacrés et intéressés à garantir les performances et la fiabilité de cette fonction, que ce qui peut être copié / collé à partir d'un post stackoverflow.
HoldOffHunger
1
@HoldOffHunger Vous avez absolument raison. Cependant toCharArray () retourne le type primitif de tableau au lieu de l'objet Character selon les besoins de OP. Bien sûr, vous pouvez à nouveau parcourir le caractère [] pour le convertir en caractère []. Mais, faire une boucle sur une chaîne d'annonce créant un objet Character est si simple que je ne vois pas pourquoi ne pas simplement lancer le vôtre si vous ne voulez pas importer de bibliothèque tierce.
Alvin le
6

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
JDGuide
la source
4
Ce n'est pas du tout ce que le PO demandait.
Qix - MONICA a été égaré
3

String#toCharArrayrenvoie un tableau de char, ce que vous avez est un tableau de Character. Dans la plupart des cas, peu importe que vous l' utilisiezchar ou Characterqu'il y ait une boîte automatique . Le problème dans votre cas est que les tableaux ne sont pas autoboxés, je vous suggère d'utiliser un tableau de char ( char[]).

Sandro
la source
2

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

Chandra Sekhar
la source
2

Cette méthode prend String 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;
}
Loknath
la source
1

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]);
    }
Balaswamy Vaddeman
la source
1

Conversion d'une chaîne en tableau de caractères, puis conversion d'un 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]

// ONE WAY: Conversion du tableau de caractères en chaîne

  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

// Deuxième méthode: conversion du tableau de caractères en chaîne

String.valueOf(characterArray);

// Troisième FAÇON: Conversion du tableau de caractères en chaîne

Arrays.stream(characterArray)
           .mapToObj(i -> (char)i)
           .collect(Collectors.joining());

Conversion d'une chaîne en tableau de caractères

Character[] charObjectArray =
                           givenString.chars().
                               mapToObj(c -> (char)c).
                               toArray(Character[]::new);

Conversion d'un tableau de caractères en tableau de caractères

 String givenString = "MyNameIsArpan";
char[] givenchararray = givenString.toCharArray();


     String.valueOf(givenchararray).chars().mapToObj(c -> 
                         (char)c).toArray(Character[]::new);

avantages de la conversion d'un tableau de caractères en tableau de caractères, vous pouvez utiliser la fonction Arrays.stream pour obtenir le sous-tableau

String subStringFromCharacterArray = 

              Arrays.stream(charObjectArray,2,6).
                          map(String::valueOf).
                          collect(Collectors.joining());
Arpan Saini
la source
0

si vous travaillez avec JTextField, 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]);
M.Shams Tabrez
la source
0

le chaînage est toujours le meilleur: D

String str = "somethingPutHere";
Character[] c = ArrayUtils.toObject(str.toCharArray());
ak_2050
la source
1
chaining is always bestFaux.
Qix - MONICA A ÉTÉ BRUYÉE
1
ArrayUtils ne fait pas partie du JDK.
mbmast
0

Si vous ne voulez pas compter sur des API tierces, voici un code de travail pour JDK7 ou inférieur. Je n'instancie pas les objets caractère temporaires comme le font les autres solutions ci-dessus. les boucles foreach 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;
}
realPK
la source
0

J'ai utilisé la StringReader classe java.io . L'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]);
}

L'exécution de ceci vous donne le résultat:

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
John K
la source