2010-10-07 14 views

Répondre

13

c'est la conversion

for(int i = 0 ; i < objectArr.length ; i ++){ 
    try { 
     strArr[i] = objectArr[i].toString(); 
    } catch (NullPointerException ex) { 
     // do some default initialization 
    } 
} 

C'est coulée

String [] strArr = (String[]) objectArr; //this will give you class cast exception 

Mise à jour:

Tweak 1

String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class); 

Tweak2

Arrays.asList(Object_Array).toArray(new String[Object_Array.length]); 

Remarque: Cela ne fonctionne que si les objets sont toutes les chaînes; fonctionne son code actuel, même si elles ne sont pas

forTweak1: uniquement sur Java 1.6 et au-dessus

+1

Avoir 'Object' comme identifiant semble être une mauvaise idée, et le casting que vous proposez aboutit à une' ClassCastException'. – aioobe

+0

Cela ne fonctionne pas: String [] strArr = (String []) objectArr []; – nanda

+0

@nanda a supprimé ces [] –

2

Je pense que c'est la façon la plus simple si toutes les entrées de objectArr sont cordes:

for(int i = 0 ; i < objectArr.length ; i ++){ 
    strArr[i] = (String) objectArr[i]; 
} 
+0

donne une exception de cast de classe si vous avez autre chose que des chaînes dans le tableau d'objet ... – aioobe

+0

pas si vous suivez mes instructions :): Je pense que c'est le moyen le plus simple * si toutes les entrées dans objectArr sont String *: – nanda

+0

Désolé. tu as raison. ma faute. – aioobe

4

simplement coulée comme ce String[] strings = (String[]) objectArray; ne fonctionnera probablement pas.

Essayez quelque chose comme ceci:

public static String[] asStrings(Object... objArray) { 
    String[] strArray = new String[objArray.length]; 
    for (int i = 0; i < objArray.length; i++) 
     strArray[i] = String.valueOf(objArray[i]); 
    return strArray; 
} 

Vous pouvez ensuite utiliser la fonction soit comme celui-ci

Object[] objs = { "hello world", -1.0, 5 }; 
String[] strings = asStrings(objs); 

ou comme celui-ci

String[] strings = asStrings("hello world", -1.0, 5); 
+0

Il ne gérera pas NPE, avec un tableau cela pourrait être souvent le cas. –

+0

Ops. Il devrait être 'String.valueOf' (l'avait dans une révision précédente :-) corrigée. Merci. – aioobe

2

Je suppose que vous pouvez également utiliser System.arraycopy

fourni, strarray est de la longueur objarray.length et objarray contient uniquement des chaînes. Ou il lancerait ArrayStoreException. Voir le commentaire d'aioobe.

+1

... et à condition que objarray contienne uniquement des chaînes ... sinon vous rencontrerez une exception ArrayStoreException. – aioobe

+0

Merci aioobe! J'étais sur le point de modifier mon message. – bdhar