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?


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

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()

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

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

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[]).


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].


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

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

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());

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

0

le chaînage est toujours le meilleur: D

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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.