0

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.

enter image description here

CODE:

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);

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)
Ondrej Tokar
  • 4,898
  • 8
  • 53
  • 103

1 Answers1

1

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.

Ofer Lando
  • 814
  • 7
  • 12