【问题标题】:Storing ArrayList Data and Converting to a String[][]存储 ArrayList 数据并转换为 String[][]
【发布时间】:2011-10-22 11:20:25
【问题描述】:

我认为我的代码可以正确地将数据存储在 ArrayList 中。但是,我无法将列表转换为 String[][]。这是我的代码:

        int row = 0;
        int col = 0;

        String fileInput = JOptionPane.showInputDialog(null, 
                "Please enter the path of the CSV file to read:");

        File file = new File(fileInput);

        BufferedReader bufRdr;
        bufRdr = new BufferedReader(new FileReader(file));
        String line = null;

        // Construct a new empty ArrayList for type String
        ArrayList<String[]> al = new ArrayList<String[]>();

        //read each line of text file
        while((line = bufRdr.readLine()) != null) {
            String[] columnData = line.split(",");
            al.add(columnData);
        }

        // Convert ArrayList to String array
        String[][] numbers = (String[][]) al.toArray(new String[al.size()][16]);

我收到一条错误消息,指出我无法转换为 String[][] 类型。关于我能做什么的任何想法?

编辑:所以转换问题解决了(上面粘贴了编辑的代码) - 现在它什么也没输出。我觉得我一定是错误地存储了数据。我应该添加/更改什么?

【问题讨论】:

    标签: java string multidimensional-array arraylist


    【解决方案1】:

    该数组将是Object[]String[],因此强制转换不起作用。您可以(并且应该)使用提供要填充的数组的toArray() 版本:

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

    【讨论】:

    • 这行得通,但由于某种原因我的输出是空白的!我存储的内容有误吗?
    • 好吧,看看你上面的代码(我以前没有,对不起!)我看到你对每一行都使用了相同的数组对象;你需要创建一个新的。请记住,Java 中每个对象类型的变量都是 reference,就像 C++ 指针一样。您为每一行存储一次相同的指针。您需要在循环内移动columnData 的声明/初始化,以便为每一行创建一个新数组。最后,考虑使用String.split()对每一行进行tokenize;它会直接为您提供该数组,而 StringTokenizer 已被弃用。
    • 我讨厌听起来很需要,但是作为 Java 的初学者,您介意编辑代码来告诉我您的意思吗?我尝试在循环内移动 columnData 的声明,但我得到一个空指针异常(我触摸的所有内容都会产生错误!)另外,我不确定要添加/取出什么,以及在哪里放置这些添加,使用字符串.split()。非常感谢您的帮助,如果给我带来麻烦,我深表歉意。
    • 没问题。我在上面更改了您的代码。当然,现在你原来的问题根本没有任何意义:)
    • 我更改了问题的标题 :)。我非常有信心这最终会奏效,但我又遇到了一个错误(数组索引超出范围异常:3)。我在生成数组后打印出数组,存储的数据似乎在它应该在的位置,所以我不确定为什么会出现这个异常。我的猜测是这发生在我的代码中的其他地方。该错误没有告诉我这发生在哪个行号上-您知道我如何检索该行号吗?这将有助于了解发生了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 2011-08-20
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    相关资源
    最近更新 更多