我看到的所有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
答案 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并且您想获取表数据,那么您应该提供描述列名称和维度的元数据。没有这些元数据,就无法正确解析文档。