很简单,我想用分号分隔行。但是,在调试时,最后两个值会以某种方式被修剪。
我要分割的行:::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);
如方法文档中所述 - “限制参数控制应用模式的次数,因此影响结果数组的长度。如果限制 n 大于零,则最多将应用模式 n - 1 次,数组的长度将不大于 n,并且数组的最后一个条目将包含最后一个匹配分隔符之外的所有输入。如果 n 为非正数,则模式将被应用尽可能多次,并且数组可以有任意长度。如果 n 为零,则该模式将被应用尽可能多次,数组可以有任意长度,并且尾随的空字符串将被丢弃。“
或者换句话说 - 使用“-1”使分割创建的数组包含所有“值” - 即使它们为空。
关于java - 当我用分号分隔时,拆分函数会忽略最后 2 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28345158/