拆分成单独的数组

时间:2013-08-18 12:08:14

标签: java arrays csv split

我看到的所有split命令都将CSV文件拆分为1个数组。

e.g。

cat,feline,house
dog,canine,house
monkey,primate,zoo

array[0] = cat    
array[1] = feline
array[2] = house

有没有办法将它们分成每行单独的数组,因此更像(因此您可以将特定属性保存在csv的相同行中: 成

animal[0] = cat    
species[0] = feline
lives[0] = house

4 个答案:

答案 0 :(得分:3)

更好的方法是创建POJO:

public class MyAnimal {
    private String animal;
    private String family;
    private String place;
    private String country;
    // getters and setters...
}

然后您可以使用解析器或逐行读取文件并将其转换为List<MyAnimal>

使用数组来保存对象数据不是这样做的。

答案 1 :(得分:1)

据我所知,这样的抽象拆分不存在默认值。

实现这一目标的基本方法是首先按照你的说法进行常规分割,这样就得到了结果。

array[0] = cat    
array[1] = feline
array[2] = house

然后你可以遍历array并检查不同的东西。

ArrayList<String> animals = new ArrayList<String>();
ArrayList<String> lives = new ArrayList<String>();

for (int i = 0; i < array.length; i++) {
    if (array[i].equalsIgnoreCase("cat") || array[i].equalsIgnoreCase("dog")) {
        animals.add(array[i]);
    }
    else if (array[i].equalsIgnoreCase("house") || array[i].equalsIgnoreCase("zoo")) {
        lives.add(array[i]);
    }
}

那么你当然会为你拥有的所有案件做到这一点。这是一个非常复杂的方法,虽然很容易理解。

修改

为了达到你在评论中提到的内容,你可以做这样的事情。

ArrayList<String> animals = new ArrayList<String>();
ArrayList<String> lives = new ArrayList<String>();

for (int i = 0; i < array.length; i += 5) {
    animals.add(array[i]);
    lives.add(array[i + 1]);
}

然后,+ 1用于选择数组中的索引当然取决于拆分String中的索引。

答案 2 :(得分:1)

你可以试试这个

BufferedReader br = new BufferedReader(new FileReader("D:\\sample.txt"));
    String st = null;
    String[] animal = new String[10];
    String[] species = new String[10];
    String[] lives = new String[10];
    int j = 0;
    while ((st = br.readLine()) != null) {
        String[] str = st.split(",");

        for (int i = 0; i < str.length; i++) {
            animal[j] = str[0];
            species[j] = str[1];
            lives[j] = str[2];
        }
        j++;
    }

但最好在这里使用ArrayList

答案 3 :(得分:0)

String.split就像分隔符分隔项目一样,它不知道项目是什么。如果要在解析字符串时关联某些模式上的项目,则应将这些模式提供给项目应与之关联的类别。如果它是CSV并且您想获取表数据,那么您应该提供描述列名称和维度的元数据。没有这些元数据,就无法正确解析文档。