【发布时间】:2021-11-16 02:07:45
【问题描述】:
我有一个包含以下数据的 CSV 文件:
20210903|0000000001|0081|A|T60|BSN|002|STATE UNITED
我已使用此代码在我的 java 应用程序中导入此文件:
public List<EquivalenceGroupsTO> read() throws FileNotFoundException, IOException {
try (BufferedReader br = new BufferedReader(new FileReader("/home/myself/Desk/blaBla/T60.csv"))) {
List<String> file = new ArrayList<String>();
StringBuilder sb = new StringBuilder();
String line = br.readLine();
Integer count = 0;
HashSet<String> hset = new HashSet<String>();
while (line != null) {
//System.out.println("data <" + count + "> :" + line);
count++;
file.add(line);
file.add("\n");
line = br.readLine();
}
EquivalenceGroupsTO equivalenceGroupsTO = new EquivalenceGroupsTO();
List<EquivalenceGroupsTO> equivalenceGroupsTOs = new ArrayList<>();
for (String row : file) {
equivalenceGroupsTO = new EquivalenceGroupsTO();
String[] str = row.split("|");
equivalenceGroupsTO.setEquivalenceGroupsCode(str[5]);
equivalenceGroupsTO.setDescription(str[7]);
equivalenceGroupsTO.setLastUpdateDate(new Date());
equivalenceGroupsTOs.add(equivalenceGroupsTO);
System.out.println("Tutto ok!");
}
return equivalenceGroupsTOs;
}
}
我需要在 equivalenceGroupsTO.setEquivalenceGroupsCode 和 equivalenceGroupsTO.setDecription (它们是字符串)中分别设置第五个和第七个“|”之后的字符串,然后是“BSN”和“STATE UNITED”。
但是如果我启动这个脚本,它会给我这个错误:
java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 1
at it.utils.my2.read(OpenTXTCodifa.java:46)
我做错了什么?
【问题讨论】:
-
你想要:
String[] str = row.split("\\|"); -
做一些基本的调试。 “|”是正则表达式的特殊字符。我写了一个简单的单行测试代码来证明这一点:
System.out.println( "1|2|3".split("|").length );它显示“5”。使用上述建议转义“|”我得到了“3”,这是正确的。因此,鉴于您的代码认为您在数组中只有一个值,您还有其他一些问题。为什么要将“\n”重新添加到 ArrayList 中?为什么你甚至有一个 ArrayList?只需在从文件中读取文本时处理每一行文本。 -
正如人们在上面所说的那样,绝大多数代码都是多余的。创建您的 List
equivalenceGroupsTOs = new ArrayList(); 并在"\\|"上拆分并在循环中添加到List然后返回它
标签: java arrays string list arraylist