我正在试图通过“,”拆分CSV中的列,然后将其放入arraylist中。例如,我的CSV看起来像这样:
Member_ID,Member Name
11001,Jack Brown
11009,James White
11014,Barbara Jones
所以我想将memberId列下的所有内容放入名为IDs的arrayList中。
这是我目前的代码:
String File = ("MEMBER.csv");
Scanner read = new Scanner(SubscriptionService.class.getResourceAsStream(File));
read.useDelimiter(",|\\n");
ArrayList<String> IDs = new ArrayList<>();
read.nextLine();
while (read.hasNext()) {
IDs.add(read.next());
}
System.out.println("Member_ID Username");
for (int i = 0; i < IDs.size(); i++) {
System.out.println(IDs.get(i));
}
当我打印以查看ID arraylist中的内容时,它会打印所有内容而不仅仅是ID:
11001
Jack Brown
11009
James White
11014
Barbara Jones
确实想尝试避免使用其他库,例如Open CSV。
答案 0 :(得分:0)
作为一般性评论,如上所述,不建议进行“自定义”CSV
解析。对于任何生产环境,应首选成熟的库(如OpenCSV
)。
话虽如此,这是一项简单的I / O任务,可以使用BufferedReader
而不是Scanner
更好地实现。 ArrayList
不是用于存储此类数据的最合适的数据结构,除非当然只需要CSV
列中的一个。
尽管如此,假设输入文件由帖子中显示的形式的行组成,则读取任何此类文件的方法是:
public static void read(String name) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(SubscriptionService.class.getResourceAsStream(name)));
ArrayList<String> IDs = new ArrayList<>();
ArrayList<String> names = new ArrayList<>();
String line;
String[] tokens;
while ((line = reader.readLine()) != null) {
tokens = line.split(",");
if (tokens.length != 2) { // Skip any "weird" (e.g., empty) line
continue;
}
IDs.add(tokens[0].trim());
names.add(tokens[1].trim());
}
System.out.println("Member_ID\tUsername");
for (int i = 0; i < IDs.size(); i++) { // IDs and names have the same size
System.out.println(IDs.get(i) + "\t" + names.get(i));
}
}
该方法使用BufferedReader
以标准化方式逐行读取输入文件,并将数据存储在2个ArrayList
个对象中,一个用于ID,另一个用于名称。 trim()
方法用于删除逗号分隔符之前或之后的任何空格。
在阅读整个文件后,read()
方法逐行打印结果,用tab
字符(\t
)分隔2个字段。
如果只需要打印ID,则可以相应地编辑代码。在这种情况下,也可以修改该方法以返回IDs
ArrayList
。