循环运行一次?

时间:2015-04-30 06:07:45

标签: java file loops file-io while-loop

拆分功能不起作用。对于最后一个print语句,它给出了 while (inFile.hasNext()) { String clean = inFile.nextLine(); String[] nm = clean.split(","); for (int i = 0; i < nm.length; i++) { System.out.println("at index "+ i +" string is "+nm[i]); } System.out.print("at index"+2+"Strin"+nm[3]); } 错误。有什么帮助吗?

input1,2,3,4,5
input2,2,3,4,5
input3,3,4,5,6
input4,3,4,5,6
input5,3,4,5,6

文本文件:

at index 0 string is input1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    at filereader.FileReader.main(FileReader.java:33)
Java Result: 1

输出:

Inventory

3 个答案:

答案 0 :(得分:1)

代码对我来说似乎是正确的,它不应该像这样失败。我能看到的唯一原因是输入文件中是否有空行,在这种情况下System.out.print("at index"+2+"Strin"+nm[3]);将在nm[3]返回一个ArrayOutOfBoundException

或者你可以这样编写你的代码:

 while (inFile.hasNext())
        {
           String clean = inFile.nextLine();
           if(clean != null && clean != ""){
            String[] nm = clean.split(",");
            for (int i = 0; i < nm.length; i++)
             {
                System.out.println("at index "+ i +" string is "+nm[i]);
             }
            System.out.print("at index"+2+"Strin"+nm[3]);
           }
        }

希望这有效。

答案 1 :(得分:1)

这会给你错误:

System.out.print("at index"+2+"Strin"+nm[3]);

这是因为你要么有一个空白行,要么只有少于4个逗号分隔的行。试试这个:

System.out.print("at index"+2+"Strin"+nm[nm.length-1]);

答案 2 :(得分:1)

也许数组nm在行

没有4个元素
System.out.print("at index"+2+"Strin"+nm[3]);

在打印第4个元素之前,检查数组是否包含至少4个元素。

    // create a new scanner with the specified String Object
    Scanner inFile = new Scanner(s);
    while (inFile.hasNext())
    {
        String clean = inFile.nextLine();
        String[] nm = clean.split(",");
        for (int i = 0; i < nm.length; i++)
        {
            System.out.println("at index "+ i +" string is "+nm[i]);
        }
        if (nm.length > 3) {
            System.out.print("at index"+2+"Strin"+nm[3]);
        }
      }
相关问题