如何在Java中将Object[]转换为String[]?

10

我有一个关于Java的问题。我有一个Object[](Java默认,不是用户定义的),我想将它转换为一个String[]。有人可以帮助我吗?谢谢。


2
这个 Object[] 来自哪里? - Ricky Clarkson
@RickyClarkson 谢谢Rick,避免冗余的装箱拆箱是一个好观点。 - Davut Gürbüz
7个回答

21

这是转换内容

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

这是类型转换

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

更新:

微调1

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

Tweak2

 Arrays.asList(Object_Array).toArray(new String[Object_Array.length]);
注意: 仅当对象全部为字符串时才有效;他当前的代码即使它们不是字符串也可以正常工作。

forTweak1: 仅适用于Java 1.6及以上版本。


1
使用Object作为标识符似乎不是一个好主意,而您建议的强制转换会导致ClassCastException - aioobe
另外一个问题是,如果对象数组恰好包含null值,使用这种解决方案会导致NPE错误。最好按照我的答案中所做的那样,通过String.valueOf来处理。 - aioobe
1
String[] strArr = (String[]) objectArr; 这仍然无法工作! - nanda
@nanda 是的,你说得对,这会在运行时给出 ClassCastException,因为我们不确定哪个对象正在持有。 - jmj
最终应该是(String[])objs。你能编写一段代码,其中String[] strArr =(String[])objectArr; 不会抛出任何异常吗? - nanda
显示剩余7条评论

5

仅仅像这样强制转换 String[] strings = (String[]) objectArray; 可能行不通。

尝试使用以下方法:

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

您可以像这样使用该函数:
Object[] objs = { "hello world", -1.0, 5 };
String[] strings = asStrings(objs);

或者像这样

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

它无法处理NPE,对于数组来说,这种情况经常发生。 - Colin Hebert
糟糕,应该是String.valueOf(在早期版本中有它 :-) 已更正。谢谢。 - aioobe

5

Java 8的解决方案:

String[] strArr = Arrays.stream(objArr).map(Object::toString).toArray(String[]::new);

2

如果objectArr中的所有条目都是字符串,我认为这是最简单的方法:

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

如果在对象数组中除了字符串以外还有其他类型的数据,就会抛出类转换异常... - aioobe
我认为如果objectArr中的所有条目都是字符串,这是最简单的方法: - nanda

2
我猜您也可以使用System.arraycopy
System.arraycopy(objarray, 0, strarray, 0, objarray.length);

如果 `strarray` 的长度与 `objarray.length` 相同且 `objarray` 中仅包含字符串,则不会抛出 `ArrayStoreException` 异常。请参见 aioobe 的评论。

1
...并且提供的objarray仅包含字符串...否则,您将遇到ArrayStoreException。 - aioobe

0

我的观点并不完全适用于答案(特定情况),但可能会发生某人无意中结束在object[]中。

在我的情况下,我试图将List转换为String[],在列表上使用.toArray()时,它将其转换为Object[]

因此,针对所提到的场景,有一个一行解决方案。

List<String> list = Arrays.asList("a", "b", "c", "d");
String[] array = list.toArray(new String[list.size()]);
System.out.println(Arrays.toString(array)); // [a, b, c, d]

0

toArray 参数只是一个占位符,因此您不需要分配特定的大小。

使用以下代码即可:

String[] array = list.toArray(new String[0]);

这是上述行的另一种变体:
String [] strArr = Arrays.asList(Object_Array).toArray(new String[0]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接