J'utilise le code suivant pour convertir un tableau Object en un tableau String:
Object Object_Array[]=new Object[100];
// ... get values in the Object_Array
String String_Array[]=new String[Object_Array.length];
for (int i=0;i<String_Array.length;i++) String_Array[i]=Object_Array[i].toString();
Mais je me demande s’il existe une autre façon de procéder, par exemple:
String_Array=(String[])Object_Array;
Mais cela provoquerait une erreur d'exécution: Exception in thread "AWT-EventQueue-0" Java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
Quelle est la bonne façon de le faire?
Une autre alternative à System.arraycopy
:
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
Dans Java 8:
String[] strings = Arrays.stream(objects).toArray(String[]::new);
Pour convertir un tableau d'autres types:
String[] strings = Arrays.stream(obj).map(Object::toString).
toArray(String[]::new);
System.arraycopy est probablement le moyen le plus efficace, mais pour des raisons esthétiques, je préférerais:
Arrays.asList(Object_Array).toArray(new String[Object_Array.length]);
Je vois que certaines solutions ont été apportées mais aucune cause, je vais donc expliquer cela en détail, car j'estime qu'il est tout aussi important de savoir ce que vous avez fait de mal que de simplement obtenir "quelque chose" qui fonctionne à partir des réponses données.
Voyons d'abord ce que Oracle a à dire
* <p>The returned array will be "safe" in that no references to it are
* maintained by this list. (In other words, this method must
* allocate a new array even if this list is backed by an array).
* The caller is thus free to modify the returned array.
Cela peut ne pas sembler important, mais comme vous le constaterez ... Alors, à quoi échoue la ligne suivante? Tous les objets de la liste sont String mais il ne les convertit pas, pourquoi?
List<String> tList = new ArrayList<String>();
tList.add("4");
tList.add("5");
String tArray[] = (String[]) tList.toArray();
Beaucoup d’entre vous pensent probablement que ce code fait la même chose, mais ce n’est pas le cas.
Object tSObjectArray[] = new String[2];
String tStringArray[] = (String[]) tSObjectArray;
Quand en réalité le code écrit fait quelque chose comme ça. Le javadoc le dit! Cela va créer un nouveau tableau, ce que ce sera des objets !!!
Object tSObjectArray[] = new Object[2];
String tStringArray[] = (String[]) tSObjectArray;
Donc, tList.toArray instancie un objet et non une chaîne ...
Par conséquent, la solution naturelle qui n’a pas été mentionnée dans ce fil, mais que recommande Oracle est la suivante:
String tArray[] = tList.toArray(new String[0]);
J'espère que c'est assez clair.
Le framework Google Collections propose une bonne méthode de transformation pour vous permettre de transformer vos objets en chaînes. Le seul inconvénient est que cela doit être d'Iterable à Iterable, mais voici comment je le ferais:
Iterable<Object> objects = ....... //Your chosen iterable here
Iterable<String> strings = com.google.common.collect.Iterables.transform(objects, new Function<Object, String>(){
String apply(Object from){
return from.toString();
}
});
Cela vous évite d'utiliser des tableaux, mais je pense que ce serait ma méthode préférée.
Si vous voulez obtenir une représentation sous forme de chaîne des objets de votre tableau, alors oui, il n'y a pas d'autre moyen de le faire.
Si vous savez que votre tableau Object contient uniquement des chaînes, vous pouvez également effectuer les opérations suivantes (même si vous appelez toString ()):
for (int i=0;i<String_Array.length;i++) String_Array[i]= (String) Object_Array[i];
Le seul cas où vous pourriez utiliser le transfert en String [] de l'Object_Array serait si le tableau auquel il fait référence serait en réalité défini comme String [], par exemple. cela fonctionnerait:
Object[] o = new String[10];
String[] s = (String[]) o;
Celui-ci est agréable, mais ne fonctionne pas comme l'a remarqué mmyers, à cause des crochets:
Arrays.toString(objectArray).split(",")
Celui-ci est moche mais fonctionne:
Arrays.toString(objectArray).replaceFirst("^\\[", "").replaceFirst("\\]$", "").split(",")
Si vous utilisez ce code, vous devez vous assurer que les chaînes renvoyées par toString () de vos objets ne contiennent pas de virgules.
Pour votre idée, vous vous approchez du succès, mais si vous faites comme ça, ça devrait aller:
for (int i=0;i<String_Array.length;i++) String_Array[i]=(String)Object_Array[i];
BTW, l’utilisation de la méthode utilitaire Arrays est assez bonne et rend le code élégant.
Object arr3[]=list1.toArray();
String common[]=new String[arr3.length];
for (int i=0;i<arr3.length;i++)
{
common[i]=(String)arr3[i];
}
Vous pouvez utiliser convertisseur de type . Pour convertir un tableau de n'importe quel type en tableau de chaînes, vous pouvez enregistrer votre propre convertisseur:
TypeConverter.registerConverter(Object[].class, String[].class, new Converter<Object[], String[]>() {
@Override
public String[] convert(Object[] source) {
String[] strings = new String[source.length];
for(int i = 0; i < source.length ; i++) {
strings[i] = source[i].toString();
}
return strings;
}
});
et l'utiliser
Object[] objects = new Object[] {1, 23.43, true, "text", 'c'};
String[] strings = TypeConverter.convert(objects, String[].class);
Changez facilement sans aucun mal de tête Convertissez un tableau d'objets en tableau de chaînes Object drivex [] = {1,2};
for(int i=0; i<drive.length ; i++)
{
Str[i]= drivex[i].toString();
System.out.println(Str[i]);
}