如何在字符串数组中存储arraylist值

时间:2013-08-02 08:44:16

标签: casting arraylist itext arrays

  

com.itextpdf.text.DocumentException:java.lang.ArrayStoreException

Q值。当尝试下面的代码尝试将ArrayList更改为String []数组类型时,发生异常。我不知道出了什么问题。

try {
                Class.forName("com.mysql.jdbc.Driver");

        String url ="jdbc:mysql://localhost/falg_check";
        con = DriverManager.getConnection(url,"root", "root");
        stmt = con.createStatement();
        rs4 = stmt.executeQuery("SELECT * from records");
        String[] arrayOfStrings;          
        ArrayList<String[]> name=new ArrayList<String[]>(); 
        while(rs4.next()){
            String insert =rs4.getString("name");
            final String[] res={insert};                
            name.add(res);                                                  
        }
        //Object[] x=name.toArray();


 arrayOfStrings = name.toArray(new String[name.size()]); //<---------------
        }
        catch(Exception e) {
            System.out.println(ioe);
            throw new ExceptionConverter(ioe);
        }

EDIT: * 我需要一维数组,以便我可以将这些值放在text.setChoices(arrayOfStrings)中;它通过JAVA在PDF文件的下拉菜单中设置选项。 *

  

编辑:如何不重复。

我希望ArrayList使用String Array更改引用中的类型,而stackoverflow上的任何问题都不是这样。而且我也想要单维数组。理解2D int Array和线性String Array之间的区别并不太难。可能是概念与其他几种类型的转换问题相匹配,但它是部分/条件不同的问题。

1 个答案:

答案 0 :(得分:3)

您已定义

ArrayList<String[]> name=new ArrayList<String[]>()

当您调用name.toArray()时,您将获得原始列表所包含类型的元素数组。由于您的列表包含String[]个实例,name.toArray()会返回String[][],即一个String 数组的数组,而不是一个字符串数组。

因此,您实际上必须使用该字符串数组数组:

String[][] arrayOfStrings;
...
arrayOfStrings = name.toArray(new String[name.size()][]);

或者您使用字符串列表而不是字符串数组列表:

ArrayList<String> name=new ArrayList<String>();
while(rs4.next())
{
    String insert = rs4.getString("name");
    name.add(insert);
}

或者在转换为数组之前将String数组列表展平为字符串列表:

String[] arrayOfStrings;
ArrayList<String[]> name = new ArrayList<String[]>();
while(rs4.next())
{
    String insert = rs4.getString("name");
    final String[] res={insert};
    name.add(res);
}
....
ArrayList<String> intermediate = new ArrayList<String>();
for (String[] stringArray: name)
{
    if (stringArray != null)
    {
        intermediate.addAll(java.util.Arrays.asList(stringArray));
    }
}
arrayOfStrings = intermediate.toArray(new String[name.size()]);