在Java中将ArrayList转换为数组

78

我有一个包含类似"abcd#xyz"和"mnop#qrs"值的ArrayList。我想将其转换为数组,然后使用#作为分隔符进行拆分,并将abcd、mnop放入一个数组中,将xyz、qrs放入另一个数组中。我尝试了以下代码:

String dsf[] = new String[al.size()];              
for(int i =0;i<al.size();i++){
  dsf[i] = al.get(i);
}

但是它失败了,显示"Ljava.lang.String;@57ba57ba"


2
请发布您的ArrayList定义和完整的错误消息。 - Guillaume Polet
7
“it failed saying ...” 的意思是什么?这看起来像是打印 dsf.toString() 的结果… - Jon Skeet
你想要一个由字符串数组组成的数组,即二维数组吗? - Adam
12个回答

127

不需要重新发明轮子,这里toArray()方法:

String []dsf = new String[al.size()];
al.toArray(dsf);

ArrayList<String> a1 = new ArrayList<String>(); for (Entry<String, String> entry : outmap.entrySet()) { if(entry.getKey().indexOf("Data") != -1){ exports.add(entry.getValue()); } } - Shruthi

64
List<String> list=new ArrayList<String>();
list.add("sravan");
list.add("vasu");
list.add("raki");
String names[]=list.toArray(new String[list.size()])

10
List<String> list=new ArrayList<String>();
list.add("sravan");
list.add("vasu");
list.add("raki"); 
String names[]=list.toArray(new String[0]);

如果您看到最后一行(new String[0]),则无需给出大小,有时我们不知道列表的长度,因此初始值为0,构建的数组将会自动调整大小。


1
我认为new String[0]是多余的,因为你总是有列表。所以你可以确定大小。 - ישו אוהב אותך
2
您可以/应该将new String[0]替换为 new String[list.size()] - ᴛʜᴇᴘᴀᴛᴇʟ

2
import java.util.*;
public class arrayList {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        ArrayList<String > x=new ArrayList<>();
        //inserting element
        x.add(sc.next());
        x.add(sc.next());
        x.add(sc.next());
        x.add(sc.next());
        x.add(sc.next());
         //to show element
         System.out.println(x);
        //converting arraylist to stringarray
         String[]a=x.toArray(new String[x.size()]);
          for(String s:a)
           System.out.print(s+" ");
  }

}

1
这不会执行所请求的分割。 - rghome
如果你希望其他人理解并可能点赞你的回答,可以为其提供描述。 - insomniac
这种方法与几年前发布的此答案中的方法相同。 - Bernhard Barker

2
String[] values = new String[arrayList.size()];
        for (int i = 0; i < arrayList.size(); i++) {
            values[i] = arrayList.get(i).type;
        }

这里的arrayList.get(i).type是arrayList中的一个值。你可以以任何方式获取它。 - Anand

1

这是你想要的正确答案,我已经在NetBeans上运行过这个解决方案。

ArrayList a=new ArrayList();
a.add(1);
a.add(3);
a.add(4);
a.add(5);
a.add(8);
a.add(12);

int b[]= new int [6];
        Integer m[] = new Integer[a.size()];//***Very important conversion to array*****
        m=(Integer[]) a.toArray(m);
for(int i=0;i<a.size();i++)
{
    b[i]=m[i]; 
    System.out.println(b[i]);
}   
    System.out.println(a.size());

1
由于使用原始类型,您的答案现在变得更差了,那么您的回答有什么改进呢? - Tom

1

NameOfArray.toArray(new String[0])

这将在Java中将ArrayList转换为数组


1

根据问题,你对迭代所做的事情并没有错。它会为你提供有效的字符串对象数组。正如另一个答案中提到的,使用ArrayList对象可用的toArray()方法更容易。 => http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#toArray%28%29

顺便说一句,如果你正确地迭代dsf数组并逐个打印每个元素,你将获得有效的输出。像这样:

for(String str : dsf){
   System.out.println(str);
}

你可能尝试一次性打印完整的数组对象,因为这样会得到一个像你在问题中得到的对象内存地址。如果你看到这种输出,你需要为你要打印的对象提供一个toString()方法。

1
package com.v4common.shared.beans.audittrail;

import java.util.ArrayList;
import java.util.List;

public class test1 {
    public static void main(String arg[]){
        List<String> list = new ArrayList<String>();
        list.add("abcd#xyz");
        list.add("mnop#qrs");

        Object[] s = list.toArray();
        String[] s1= new String[list.size()];
        String[] s2= new String[list.size()];

        for(int i=0;i<s.length;i++){
            if(s[i] instanceof String){
                String temp = (String)s[i];
                if(temp.contains("#")){
                    String[] tempString = temp.split("#");
                    for(int j=0;j<tempString.length;j++) {
                        s1[i] = tempString[0];
                        s2[i] = tempString[1];
                    }

                }
            }   
        }
        System.out.println(s1.length);
        System.out.println(s2.length);
        System.out.println(s1[0]);
        System.out.println(s1[1]);
    }
}

1

这里提供了针对您所述场景的解决方案 -

List<String>ls = new ArrayList<String>();
    ls.add("dfsa#FSDfsd");
    ls.add("dfsdaor#ooiui");
    String[] firstArray = new String[ls.size()];    
 firstArray =ls.toArray(firstArray);
String[] secondArray = new String[ls.size()];
for(int i=0;i<ls.size();i++){
secondArray[i]=firstArray[i].split("#")[0];
firstArray[i]=firstArray[i].split("#")[1];
} 

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