拆分错误 - IndexOutOfBoundsException

时间:2014-07-03 15:43:23

标签: java android split

我遇到了一个问题,我似乎无法解决。分割时,我应该能够通过设置 row [0],row [1],row [2] 来获取 id,name,check 。奇怪的是,只有row [0](id)似乎有效。 名称,检查给我一个错误。有人可以帮助我吗?

数据示例:

id,name,check
1,john,0
1,patrick,0
1,naruto,0

代码:

    ArrayList<String> names = new ArrayList<String>();
    try {

        DataInputStream dis = new DataInputStream(openFileInput(listLocation(listLoc)));
        BufferedReader br = new BufferedReader(new InputStreamReader(dis));
        String line;
        while ((line = br.readLine()) != null) {
             String[] row = line.split(Pattern.quote(","));
                 //names.add(row[0]); // id
                 names.add(row[1]); // name // ERROR AT THIS LINE
                 //names.add(row[2]); // check
        }
        br.close();
    }
    catch (IOException e) {
        e.printStackTrace();
    }

错误讯息:

Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1

解决 似乎我在文件末尾有一个不正确的值(问号)。删除此行时。我的代码工作(没有Patter.quote)。谢谢大家的快速回复。第一个答案帮助我提醒我使用Log值,我可以看到&#39;不正确的值&#39;。我的坏。

3 个答案:

答案 0 :(得分:1)

可能在时间:

String[] row = line.split(",");

被调用,您尝试阅读的文件/流的行中没有逗号(,)。

答案 1 :(得分:0)

试试这段代码,

ArrayList<String> names = new ArrayList<String>();
    try {

        DataInputStream dis = new DataInputStream(openFileInput(listLocation(listLoc)));
        BufferedReader br = new BufferedReader(new InputStreamReader(dis));
        String line;
        while ((line = br.readLine()) != null) {
            String[] row = line.split(",");
            //names.add(row[0]); // id
            names.add(row[1]); // name // ERROR AT THIS LINE
            //names.add(row[2]); // check
        }
        br.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

我认为您不需要在这里使用Pattern.quote(",")

答案 2 :(得分:0)

根据我对txt文件的经验,这是处理它的最佳方法:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.regex.Pattern;

public class Cyto {

    public static void main(String[] args) throws IOException {
        ArrayList<String> names = new ArrayList<String>();
        try {

            FileInputStream dis = new FileInputStream("list.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(dis));
            String line;
            while (br.ready()) {
                line = br.readLine();
                String[] row = line.split(Pattern.quote(","));      
                System.out.println(row[1]);
                names.add(row[1]);
            }
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

使用

br.ready()

而不是直接从流中读取。