问题
Very simple, I want to separate line by semicolon. However, while debugging, last two values are somehow trimmed.
Line I want to split: ::0;;tester@increase.dk;0;::1;; Colons are part of values, ignore them.
CODE:
BufferedReader br = new BufferedReader(new FileReader("data\\CustomObject69.csv"));
String fileLine = br.readLine();
ArrayList 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);
ERROR:
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)
解决方法
Instead of:
String[] fields = fileLine.split(";");
Use :
String[] fields = fileLine.split(";", -1);
As described in the method's documentation - "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. "
Or in other words - using "-1" makes the array created by the split include all "values" - even if they are empty.