获取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
答案 0 :(得分:5)
您split
的电话会在标签上分开;看来您的输入有一些其他类型的空格分隔标记。
要拆分任何类型的空白,请使用"\\s"
:
String[] index = line.split("\\s");
\s
是regular expression,代表以下任何一项:' ', '\t', '\n', '\x0B', '\f', '\r'
。
答案 1 :(得分:1)
编写文件的程序会在字段之间放置空格字符。您读取文件的程序正在尝试拆分制表符而不是空格。你有两个选择。
+ " "
的任何位置,将其更改为+ "\t"
line.split(" ")
。或者,您可以使用line.split("\\s")
分隔任何类型的空白区域。