我尝试使用BufferedReader
读取CSV文件,但出于某种原因,我在7行后遇到了一个超出范围的异常。我在另一个CSV文件(30行)上尝试了这个确切的算法,它运行正常。 Here是相关的CSV文件。
String spellPath = "file path is here";
FileReader y = new FileReader(spellPath);
BufferedReader x = new BufferedReader(y);
ArrayList<Card> ArrayList = new ArrayList<Card>( ); //dynamic data type
for( String p = x.readLine(); p != null ; p = x.readLine()){
String [] stArray = p.split(",");
ArrayList.add(new Card( stArray[1], stArray[2])); //new card with name and desc only
}
System.out.println(ArrayList.toString());
文件存在问题,还是算法问题?
答案 0 :(得分:3)
您的问题是连续2次调用 p = x.readLine()
for( String p = x.readLine(); p != null ; p = x.readLine()){
...
}
由于这个原因,读取了2行,只检查了1行为空
您需要将循环更改为
while (true) {
String p= x.readLine();
if (p == null) break;
...
}
答案 1 :(得分:2)
有一条线“为你在场上的每张法术卡获得500攻击力和防御力。”不包含任何,
。因此stArray[]
的长度为1。
其他事情:Java数组是零基础。
for( String p = x.readLine(); p != null ; p = x.readLine()){
应该是。{
while ((String p = x.readLine())!= null ){
答案 2 :(得分:1)
试试这个。
while(x.readLine() != null){
---`enter code here`
}
答案 3 :(得分:1)
你在循环中调用x.readLine()
两次。因此,你在阅读时跳过线条。
更好的方法是使用 CSVReader 而不是缓冲的阅读器。
CSVReader reader = new CSVReader(new FileReader(fName), ',','"','|');
List content = reader.readAll();//do not use this if CSV file is large
String[] row = null;
for (Object object : content) {
row = (String[]) object;
row = Arrays.toString(row).split(",");
//now you have a row array with length equal to number of columns
}
以下是获取CSVReader的链接 - CSVReader Download
答案 4 :(得分:1)
while((String p = x.readLine()) != null){
String [] stArray = p.split(",");
ArrayList.add(new Card( stArray[0], stArray[1])); //new card with name and desc only
}
System.out.println(ArrayList.toString());
这应该有效
答案 5 :(得分:0)
错误就是扔在这里
String [] stArray = p.split(",");
ArrayList.add(new Card( stArray[1], stArray[2]));
添加此条件并检查
String [] stArray = p.split(",");
ArrayList.add(new Card( stArray[0], stArray[1]));