将CSV值转换为JAVA中的HashMap键值对

New*_*bie 10 java csv hashmap

我有一个csv叫test.csv.我试图逐行读取csv并将值转换为哈希键值对.这是代码: -

public class Example {
public static void main(String[] args) throws ParseException, IOException {
    // TODO Auto-generated method stub

    BufferedReader br = new BufferedReader(new FileReader("test.csv"));
    String line =  null;
    HashMap<String,String> map = new HashMap<String, String>();

    while((line=br.readLine())!=null){
        String str[] = line.split(",");
        for(int i=0;i<str.length;i++){
            String arr[] = str[i].split(":");
            map.put(arr[0], arr[1]);
        }
    }
    System.out.println(map);
 }
}
Run Code Online (Sandbox Code Playgroud)

csv文件如下: -

1,"testCaseName":"ACLTest","group":"All_Int","projectType":"GEN","vtName":"NEW_VT","status":"ACTIVE","canOrder":"Yes","expectedResult":"duplicateacltrue"
2,"testCaseName":"DCLAddTest","group":"India_Int","projectType":"GEN_NEW","vtName":"OLD_VT","status":"ACTIVE","canOrder":"Yes","expectedResult":"invalidfeaturesacltrue"
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我收到此错误: -

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    Example.main(Example.java:33)
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我修复代码并找出我的程序中的错误?

Kec*_*yal 11

使用FasterXML的CSV包:https: //github.com/FasterXML/jackson-dataformats-text/tree/master/csv

public static List<Map<String, String>> read(File file) throws JsonProcessingException, IOException {
    List<Map<String, String>> response = new LinkedList<Map<String, String>>();
    CsvMapper mapper = new CsvMapper();
    CsvSchema schema = CsvSchema.emptySchema().withHeader();
    MappingIterator<Map<String, String>> iterator = mapper.reader(Map.class)
            .with(schema)
            .readValues(file);
    while (iterator.hasNext()) {
        response.add(iterator.next());
    }
    return response;
}
Run Code Online (Sandbox Code Playgroud)


Rak*_* KR 9

在你的String中,当你第一次拆分它时只包含arr[0]as 1,arr[1]因此它会导致异常

如果您不需要1,2等.您可以查看以下代码:

        String str[] = line.split(",");
        for(int i=1;i<str.length;i++){
            String arr[] = str[i].split(":");
            map.put(arr[0], arr[1]);
        }
Run Code Online (Sandbox Code Playgroud)