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

时间:2013-02-14 06:01:12

标签: java arrays jsp arraylist

目前我有以下代码,我试图从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();
            %>

4 个答案:

答案 0 :(得分:2)

 I get an exception error.

是的,因为al的类型为ArrayList<String>  ArrayList<ArrayList<String>> al = new ArrayList<ArrayList<String>>();

你正在把它投射到一个字符串数组

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

答案 1 :(得分:0)

ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
String[] array = (String[])list.toArray(new String[list.size()]);

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

答案 2 :(得分:0)

这是因为你的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是具有表记录的二维数组。现在,您需要分配哪个列 在您重要的<option>字段中 假设您需要指定column 3
因此,for-loop将成为

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

答案 3 :(得分:0)

您收到异常,因为您要转换的arraylist al中的元素属于ArrayList<String>类型,当然,这些元素无法转换为String[]

您必须使用二维数组才能使代码生效,因为您的列表al的类型为ArrayList<ArrayList<String>>,这意味着列表中的元素是另一个包含String的列表

要解决您的问题,您必须手动循环浏览列表,然后将每个元素(ArrayList<String>)转换为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]);
        }