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?
Utilisez ceci:
String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);
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:
IntStream
des caractères (vous pouvez aussi regarder aussi codePoints()
)Character
(vous devez utiliser le transtypage pour dire que c'est vraiment un char
, puis Java le placera automatiquement dans Character
)toArray()
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;
}
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
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;
}
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]
.
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[]
).
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]);
}
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;
}
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
le chaînage est toujours le meilleur: D
String str = "somethingPutHere";
Character[] c = ArrayUtils.toObject(str.toCharArray());
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
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]);