很简单,我想用分号分隔行。但是,在调试时,最后两个值会以某种方式进行修剪。
我要拆分的行:::0;;tester@increase.dk;0;::1;;
冒号是值的一部分,忽略它们。
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)
答案 0 :(得分:1)
而不是:
String[] fields = fileLine.split(";");
使用:
String[] fields = fileLine.split(";", -1);
如方法文档中所述 - &#34; limit参数控制模式的应用次数,因此会影响结果数组的长度。如果限制n大于零,则模式最多应用n - 1次,数组的长度不大于n,并且数组的最后一个条目将包含超出最后匹配的分隔符。 如果n是非正数,则模式将被应用尽可能多次,并且数组可以具有任何长度。如果n为零,那么模式将被应用尽可能多的次数,该数组可以具有任何长度,并且将丢弃尾随的空字符串。 &#34;
或换句话说 - 使用&#34; -1&#34;使得分割创建的数组包含所有&#34;值&#34; - 即使它们是空的。