在字符串上使用line.split时获取ArrayIndexOutOfBound

时间:2013-12-05 00:38:19

标签: java file-io io

获取indexOutOfBound。成功保存文件后。我打开文件来执行以下任务:找到total costPerItem,totalCount和sum。不知道我为什么离开了界限。错误指出

totalCost =+ Double.parseDouble(index[1].trim());

源代码:

 Scanner data = new Scanner(new File("registryCopy.txt"));

    while(data.hasNext()){
        String line = data.nextLine();
        System.out.println(line);

        String[] index = line.split("\\t");
        totalCost += Double.parseDouble(index[1].trim());
        totalCount += Integer.parseInt(index[2].trim());

        sum = totalCost/totalCount;

    }

错误

Error: "main" java.lang.ArrayIndexOutOfBoundsException: 1 

是:totalCost += Double.parseDouble(index[1].trim());

由于某些原因,它不分裂线。文本文件如下:

item1 15.00 3
item2 15 2
item3 14 3

之前创建了文件,并提示用户输入该数据。来源:

while(userInput.charAt(0)!='n'){
        /**
         * Need only one PrintWriter out0 i.e, then I either use the userbased name OR fixed name creation i.e registryCopy.txt(true will
         * not overwrite the file but go to the next).
         */
        PrintWriter out0 = new PrintWriter(new BufferedWriter(new FileWriter("registryCopy.txt", true)));

    System.out.print("Enter item name: ");
    itemName = kybd.next();//user String
    out0.print(itemName + " ");

    System.out.print("Enter item price: $");
    price = kybd.next();
    out0.print(price + " ");

    System.out.print("Enter item quantity: ");
    quantity = kybd.next();
    out0.println(quantity);


    System.out.print("Do you have another item to scan? Yes(y) or No(n): ");
    userInput= kybd.next();
    out0.flush();
    }//end of whileLoop

Update1:​​你们真棒,s做了伎俩。当你在芝加哥的时候喝啤酒。感谢

OUTPUT sourceCode:

sum = totalCost*totalCount;
    System.out.println("");
    System.out.println(totalCost);
    System.out.println(totalCount);
    System.out.println(sum);

SOP:

item1 15.00 3

item2 15 2

item3 14 3

item5 10.00 3

项目5 12

bla 11 5

面包1 15

item14 5 3

76.0

46

3496.0

2 个答案:

答案 0 :(得分:5)

split的电话会在标签上分开;看来您的输入有一些其他类型的空格分隔标记。

要拆分任何类型的空白,请使用"\\s"

String[] index = line.split("\\s");

\sregular expression,代表以下任何一项:' ', '\t', '\n', '\x0B', '\f', '\r'

答案 1 :(得分:1)

编写文件的程序会在字段之间放置空格字符。您读取文件的程序正在尝试拆分制表符而不是空格。你有两个选择。

  1. 更改编写文件的程序,以便插入标签字符 - 也就是说,在源中+ " "的任何位置,将其更改为+ "\t"
  2. 更改读取文件的程序,以便在空格字符上拆分该行。也就是说,将它line.split(" ")。或者,您可以使用line.split("\\s")分隔任何类型的空白区域。