从文件到arraylist,从arraylist到array []

时间:2011-07-21 07:04:28

标签: java arraylist

我有一个文本文件包含:

1 1 0 0
1 2 0 0
1 0 1 0
1 0 2 0
1 0 0 1
1 0 0 2
2 1 0 0
2 2 0 0
2 0 1 0
2 0 2 0
2 0 0 1
2 0 0 2

然后,我把内容放在arraylist中。结果与文件中的结果相同。 接下来,我想逐个处理数据,并将内容的每一行放在数组[] []中,其中数据将按行分隔。 结果将是这样的:

output[0][]={1 1 0 0}
output[1][]={1 2 0 0}
output[2][]={1 0 1 0}
output[3][]={1 0 2 0}
....
....
....

问题, 我怎样才能将arraylist中的字符串变为分离数据? 我在java中编码

谢谢

4 个答案:

答案 0 :(得分:1)

您可以使用“public String [] split(String regexp)”方法通过指定在参数中拆分的字符将字符串拆分为数组。 例如 String temp =“1 2 3 4”; temp.split(“”); 你会在你的情况下用空格分开..

答案 1 :(得分:1)

正如@Benoit所说,您可以使用String#split(regex)分割每一行,如下所示:

String line = ...;
String[] parts = line.split( "\\s+" ); //split on whitespace

请注意,前导空格可能会在开头导致空字符串,即“1 2 3 4”会导致{"", "1", "2", "3", "4"}。您也可以使用StringUtils方法处理的Apache Commons Lang类split(...)

还要注意表达式\s+,它也会在多个空格上分割,即“1 2 3 4”仍会产生{"1", "2", "3", "4"}

然后,您可以将各个部分解析为整数等。

答案 2 :(得分:0)

这是一些真正的简单代码,它使用扫描仪完成所有工作,并且每行处理任意数量的数字。

已编辑:注意选择List<List<Integer>>的返回类型为int[][]以上的理智选择

public static List<List<Integer>> parseIntArrays(InputStream in) {
    Scanner s = new Scanner(in);
    List<List<Integer>> list = new ArrayList<List<Integer>>();
    while (s.hasNextLine()) {
        Scanner ns = new Scanner(s.nextLine());
        List<Integer> nums = new ArrayList<Integer>();
        list.add(nums);
        while (ns.hasNextInt())
            nums.add(ns.nextInt());
    }
    return list;
}

以下是一些执行乐趣的测试代码:

public static void main(String[] args) {
    String input = "1 0 0\n1 2 0 0\n1 0 1 0\n1 0 2 0 0 0 1\n1";
    List<List<Integer>> result = parseIntArrays(new ByteArrayInputStream(input.getBytes()));

    for (List<Integer> line : result)
        System.out.println(line);
}

输出:

[1, 0, 0]
[1, 2, 0, 0]
[1, 0, 1, 0]
[1, 0, 2, 0, 0, 0, 1]
[1]

答案 3 :(得分:-1)

问题是:为什么使用二维数组存储数据? 按新行解析文件。对于每个新行,将该行添加到数组列表中。 对于数组列表中的每个元素,只需将其添加到数组中即可。我写了一个简单的程序。 它假设您已经解析了该文件,并使用新行填充了ArrayList。

public static void main(String[] args) {
     List<String> list = new ArrayList<String>();
     list.add("1 0 1 1");
     list.add("1 1 1 1");
             // etc

     String[][] array = new String[list.size()][list.size()];
     int i = 0;
     for (String s : list) {
         stringArray[i++][0] = s;
     }

     for (int y = 0 ; y < array.length; y++) {
         System.out.println(stringArray[y][0]);
     }
}