将对象数组列表转换为字符串数组

Posted

技术标签:

【中文标题】将对象数组列表转换为字符串数组【英文标题】:Convert Object Array List into String Array 【发布时间】:2013-01-29 21:24:31 【问题描述】:

目前我有以下代码,我正在尝试从 Object 转换为 String,但出现异常错误。

从这个 Object 数组转换为 String 数组以便它在我的 for 循环中工作的最佳方法是什么?或者有没有办法改变我的 for 循环来显示 Object 数组?

<%

          Class.forName("org.sqlite.JDBC");
            Connection conn = DriverManager.getConnection("jdbc:sqlite:/Users/rhysparker/Documents/workspace/Resource_Planner/WebContent/db/RESOURCE.SQLITE");
                Statement stat = conn.createStatement();

                ArrayList<ArrayList<String>> al = new ArrayList<ArrayList<String>>();

                ResultSet rs = stat.executeQuery("select project_name from project;");

                ResultSetMetaData metaData = rs.getMetaData();
                int columns = metaData.getColumnCount();

                while (rs.next()) 
                    ArrayList<String> record = new ArrayList<String>();
                    for (int i = 1; i <= columns; i++) 
                        String value = rs.getString(i);
                        record.add(value);
                    
                    al.add(record);
                

                String[] testing = (String[])al.toArray();

                for(int i=0;i<testing.length;i++) 
                 %> 
                <option value="<%=testing[i]%>"><%=testing[i]%></option><% 
                 

                rs.close();
               conn.close();
            %>

【问题讨论】:

它抛出了什么异常? java.lang.ClassCastException: [Ljava.lang.Object;不能转换为 [Ljava.lang.String; 【参考方案1】:
 I get an exception error.

是的,因为alArrayList&lt;String&gt; 的类型 ArrayList&lt;ArrayList&lt;String&gt;&gt; al = new ArrayList&lt;ArrayList&lt;String&gt;&gt;();

你正在把它转换成一个字符串数组

String[] testing = (String[])al.toArray();

所以它会在运行时抛出异常。

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

如果您在arraylist 中添加Arraylist,那么您有责任确保类型检查。

您可以执行以下操作:

for (ArrayList<String> list: al)
 
    String[] testing = list.toArray(new String[0]); // or (String[]) arr.toArray();
    for(int i=0;i<testing.length;i++) 
      %> 
        <option value="<%=testing[i]%>"><%=testing[i]%></option><% 
     
 

【讨论】:

这正是我想要的。我将研究数组列表以获得更好的理解。感谢您的帮助 Sumit。【参考方案2】:
ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
String[] array = (String[])list.toArray(new String[list.size()]);

你的意思是这样的?试试这个。

【讨论】:

这会引发同样的异常。 java.lang.ClassCastException:[Ljava.lang.Object;无法转换为 [Ljava.lang.String;【参考方案3】:

这是因为您的 al 是多维的(ArrayList 的 ArrayList -- 包含一个数据库表 -- 我想) 下面的代码将帮助您填写您的 testing 数组

int maxColumn = 100;    //Assuming not more than 100 columns
int rowSize = a1.size();
String[] s1 = new String[maxColumn];
String[][] testing = new String[rowSize][maxColumn];    
for(int i=0; i<rowSize; i++)

    ArrayList a1 = al.get(i);
    s1 = a1.toArray();
    for(int j=0; j<s1.length; j++)
        testing[i][j] = s1[j];

testing 是具有表记录的二维数组。现在您需要分配到哪一列 在您的 &lt;option&gt; 字段中很重要 假设你需要分配column 3 所以你的for-loop 会变成

for(int i=0;i<rowSize;i++) 
 %> 
    <option value="<%= testing[i][3] %>"><%=testing[i]%></option>
<%  

【讨论】:

【参考方案4】:

您遇到了一个异常,因为您要转换的数组列表 al 中的元素是 ArrayList&lt;String&gt; 类型,当然,它不能转换为 String[]

您的代码必须使用二维数组才能工作,因为您的列表 al 的类型为 ArrayList&lt;ArrayList&lt;String&gt;&gt;,这意味着列表中的元素是另一个包含 String 的列表

要解决您的问题,您必须手动循环遍历您的列表,然后将每个元素(即ArrayList&lt;String&gt;)转换为String[]

int yLen = al.size();
        int xLen = al.get(0).size();
        String[][] testing = new String[yLen][xLen];
        for(int a = 0; a < yLen; a++)
            testing[a] = al.get(a).toArray(testing[a]);
        

【讨论】:

以上是关于将对象数组列表转换为字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

C# - 将对象列表转换为包含多个对象属性的数组

如何将数组转换成JSON-CSDN论坛

将数组/字符串列表转换为数组/整数列表的 Lambda 表达式

如何将包含字符串列表的 numpy 数组转换为包含零和一列表的数组?

将列表列表的字符串转换为 Numpy 数组

如何将 JSON 字符串转换为 JSON 数组列表? [复制]