从文本ffile读取字符串和整数

时间:2019-01-24 19:48:41

标签: java

所以我想从文本文件中读取一个String和一个int,它使我得到java.lang.ArrayIndexOutOfBoundsException:1

public class GetNameAndNumber{
    private ArrayList <NameAndNumber> list = new ArrayList <NameAndNumber>();
    BufferedReader buf = new BufferedReader(new FileReader("NameAndNumber.txt"));
    String linie = buf.readLine();
    while(true)
            {
            linie = buf.readLine();
            if(linie == null)
                break;
            else
                {
                String split[] = linie.split(" ");
                NameAndNumber nan = new NameAndNumber(split[0], Integer.parseInt(split[1]));
                list.add(nan);
                }
            }

}

“ NameAndNumber”类具有一个字符串和一个整数

这是文本文件:

John 1
David 0
Ringo 55

我不知道为什么这会给我一个错误,但是当我读2个字符串然后是一个像

这样的int时
NameAndNumber nan = new NameAndNumber(split[0], split[1], Integer.parseInt(split[2])); - this "NameAndNumber" having two strings and an int

用于文本文件,例如

Johnny John 8
Mathew John 0

它没有错误,并且正确存储了值。为什么?

3 个答案:

答案 0 :(得分:1)

您很可能在一行上没有2个字符串。在文件末尾可能是空白行。我建议您在阅读后添加代码以显示每行,以进行调试。然后,您可以查看输入文件中错误行的位置。

linie = buf.readLine();
System.out.println("line: '" + linie + "'");

您可以添加其他代码以跳过没有两个字符串的行。

String split[] = linie.split(" ");
if (split.length < 2) continue; // skip bad input

答案 1 :(得分:1)

我假设在您的第一个文件中您有一些空白,因为我运行了您的代码,并且工作正常。我通过在索引末尾添加一些空白处使异常而使它失败。 您可以做的一件事是,通过修剪并检查行是否为空来添加一些检查,如下所示。

linie = buf.readLine().trim(); if(linie == null || linie.isEmpty()) break;

答案 2 :(得分:0)

尝试一下

    for(;;) {
        String line = bufferedReader.readLine();
        if (line == null) {
          break;
        }
   }