Ich verwende den folgenden Code, um ein Object-Array in ein String-Array zu konvertieren:
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();
Aber ich frage mich, ob es einen anderen Weg gibt, so etwas wie:
String_Array=(String[])Object_Array;
Dies würde jedoch einen Laufzeitfehler verursachen: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
Was ist der richtige Weg, um es zu tun?
Antworten:
Eine weitere Alternative zu
System.arraycopy
:quelle
In Java 8:
So konvertieren Sie ein Array anderer Typen:
quelle
System.arraycopy ist wahrscheinlich der effizienteste Weg, aber aus ästhetischen Gründen würde ich Folgendes bevorzugen:
quelle
copyof
. Beziehen Sie sich auf eine andere Antwort?Ich sehe, dass einige Lösungen bereitgestellt wurden, aber keine Ursachen, daher werde ich dies ausführlich erläutern, da ich glaube, dass es genauso wichtig ist zu wissen, was Sie falsch gemacht haben, nur um "etwas" zu erhalten, das aus den gegebenen Antworten funktioniert.
Lassen Sie uns zunächst sehen, was Oracle zu sagen hat
Es mag nicht wichtig aussehen, aber wie Sie sehen werden, ist es ... Also, was schlägt die folgende Zeile fehl? Alle Objekte in der Liste sind Zeichenfolgen, werden jedoch nicht konvertiert. Warum?
Wahrscheinlich würden viele von Ihnen denken, dass dieser Code dasselbe tut, aber das tut er nicht.
In Wirklichkeit macht der geschriebene Code so etwas. Der Javadoc sagt es! Es wird ein neues Array initiieren, was es von Objekten sein wird !!!
Also instanziiert tList.toArray ein Objekt und keine Zeichenfolgen ...
Daher ist die natürliche Lösung, die in diesem Thread nicht erwähnt wurde, aber von Oracle empfohlen wird, die folgende
Hoffe es ist klar genug.
quelle
(String)Object_Array[i]
oderObject_Array[i].toString()
das Array als String-Array zuweisenObject Object_Array[]=new String[100];
... Werte abrufen ... dann umwandeln,String_Array=(String[])Object_Array
was jetzt funktioniert.Das Google-Sammlungsframework bietet eine gute Transformationsmethode, mit der Sie Ihre Objekte in Zeichenfolgen umwandeln können. Der einzige Nachteil ist, dass es von Iterable zu Iterable sein muss, aber so würde ich es machen:
Dies nimmt Sie von der Verwendung von Arrays ab, aber ich denke, dies wäre mein bevorzugter Weg.
quelle
Wenn Sie eine String-Darstellung der Objekte in Ihrem Array erhalten möchten, gibt es keine andere Möglichkeit.
Wenn Sie wissen, dass Ihr Object-Array nur Strings enthält, können Sie dies auch tun (anstelle des Aufrufs von toString ()):
Der einzige Fall, in dem Sie die Umwandlung in String [] des Object_Array verwenden könnten, wäre, wenn das Array, auf das es verweist, tatsächlich als String [] definiert wäre, z. B. würde dies funktionieren:
quelle
Dieser ist nett, funktioniert aber aufgrund der eckigen Klammern nicht so, wie mmyers bemerkt hat:
Arrays.toString(objectArray).split(",")
Dieser ist hässlich, funktioniert aber:
Arrays.toString(objectArray).replaceFirst("^\\[", "").replaceFirst("\\]$", "").split(",")
Wenn Sie diesen Code verwenden, müssen Sie sicherstellen, dass die von toString () Ihrer Objekte zurückgegebenen Zeichenfolgen keine Kommas enthalten.
quelle
Für Ihre Idee nähern Sie sich tatsächlich dem Erfolg, aber wenn Sie dies mögen, sollte es in Ordnung sein:
Übrigens ist die Verwendung der Dienstprogrammmethode Arrays recht gut und macht den Code elegant.
quelle
quelle
Sie können den Typkonverter verwenden . Um ein Array eines beliebigen Typs in ein Array von Zeichenfolgen zu konvertieren, können Sie Ihren eigenen Konverter registrieren:
und benutze es
quelle
Einfach ohne Kopf ändern Ändern Sie ein Objektarray in ein Zeichenfolgenarray. Objekt drivex [] = {1,2};
quelle