2010-03-31 95 views
65

如何将列表转换为数组?以下代码返回一个错误。将列表<String>转换为Java中的字符串[]

public static void main(String[] args) { 
    List<String> strlist = new ArrayList<String>(); 
    strlist.add("sdfs1"); 
    strlist.add("sdfs2"); 
    String[] strarray = (String[]) strlist.toArray();  
    System.out.println(strarray); 
} 

错误:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String; 
    at test.main(test.java:10) 
+1

对于大多数有错误的问题,您应该发布您收到的错误消息。 – 2010-03-31 12:01:47

+1

我更喜欢stackoverflow。感谢您在google中的排名1。 – Ninjaxor 2013-04-07 00:57:08

回答

93

你想

String[] strarray = strlist.toArray(new String[0]); 

here的文档和注意,您也可以调用此方法以这样一种方式,它填充传递的数组,而不是仅仅用它来确定返回的类型。另外请注意,也许当你打印你的阵列时,你更喜欢

System.out.println(Arrays.toString(strarray)); 

因为那样会打印出实际的元素。

+21

使用strlist.toArray(new String [strlist.size()]);通常效率更高。 – 2010-04-02 17:28:50

3

List.toArray()必然返回一个Object数组。要获取字符串数组,您需要使用投射语法:

String[] strarray = strlist.toArray(new String[0]); 

有关更多信息,请参阅javadoc for java.util.List。

18
public static void main(String[] args) { 
    List<String> strlist = new ArrayList<String>(); 
    strlist.add("sdfs1"); 
    strlist.add("sdfs2"); 

    String[] strarray = new String[strlist.size()] 
    strlist.toArray(strarray); 

    System.out.println(strarray); 


} 
+2

我也喜欢这个版本的'toArray'方法,因为它重新使用参数strarray,而不是返回一个新的实例 – 2010-03-31 12:17:23

2

我设计并为这种任务的实现Dollar

String[] strarray= $(strlist).toArray(); 
+0

你的$ API看起来不错,也许像'sort'这样的几个方法可以接受比较器,这会使它更加有用。 – Greg 2010-03-31 13:24:54

+0

谢谢!随意发送补丁或使用bitbucket打开功能请求。 – dfa 2010-03-31 13:33:56

+0

为了看到你的实现,我必须安装20M程序来'克隆​​'你的254.3 KB源代码。 – Sawyer 2010-03-31 13:39:06

0

字符串[] strarray = strlist.toArray(新的String [0]);

if you want List转换为字符串 use StringUtils.join(slist,'\ n');