0

我见过的所有拆分命令(例如)将一个CSV文件拆分为 1 个数组。

例如

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

4 回答 4

3

更好的方法是创建一个 POJO:

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

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

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

于 2013-08-18T12:11:26.197 回答
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用于选择数组中的索引当然取决于 splitted 中的索引String

于 2013-08-18T12:16:15.000 回答
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这里使用。

于 2013-08-18T12:16:19.157 回答
0

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

于 2013-08-18T12:30:47.280 回答