当我用分号分隔时,拆分函数会忽略最后 2 个值

Split function ignores last 2 values when I separate by semicolon

很简单,我想用分号隔行。但是,在调试时,最后两个值会以某种方式被修剪。

我要拆分的行:::0;;tester@increase.dk;0;::1;;冒号是值的一部分,请忽略它们。

代码:

BufferedReader br = new BufferedReader(new FileReader("data\CustomObject69.csv"));
    String fileLine = br.readLine();
    ArrayList<ContactFromExperienceCDO> contacts=new ArrayList<>();
    while (fileLine!=null && fileLine.length()>0){
        fileLine=br.readLine();
        String[] fields = fileLine.split(";");
        String skinIrritations1 = fields[0];
        String EmailAddress1 = fields[2];
        String adhesionIssues1 = fields[4];
        String pouchIssues1 = fields[5];
        ContactFromExperienceCDO contact=new 
        ContactFromExperienceCDO(EmailAddress1, 
        pouchIssues1,skinIrritations1,adhesionIssues1);
        contacts.add(contact);

错误:

    Exception in thread "main" java.lang.NullPointerException
    at 
    Consumer.SharedListManipulation. 
    writeContactsToCsv(SharedListManipulation.java:182)
    at Consumer.SharedListManipulation. 
    getContactsFromListLoop(SharedListManipulation.java:163)
    at Consumer.SharedListManipulation. 
    getContactsFromList(SharedListManipulation.java:114)
    at Consumer.Main.main(Main.java:38)

而不是:

String[] fields = fileLine.split(";");

使用:

String[] fields = fileLine.split(";", -1);

如方法文档中所述 - "The limit parameter controls the number of times the pattern is applied and therefore affects the length of the resulting array. If the limit n is greater than zero then the pattern will be applied at most n - 1 times, the array's length will be no greater than n, and the array's last entry will contain all input beyond the last matched delimiter. If n is non-positive then the pattern will be applied as many times as possible and the array can have any length. If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded. "

或者换句话说 - 使用“-1”使拆分创建的数组包含所有 "values" - 即使它们是空的。