我在使用nextLine()
读取文本文件时遇到问题。之前,我尝试使用.next()
使用这种文本文件,它工作正常。
2
3333
CookingRange
50 450.00 850.00
4444
CircularSaw
150 45.00 125.00
现在我想使用nextLine()
读取文件中的输入来读取该行,即使它在字符串之间有空格也是如此。
2
3333
Cooking Range
50 450.00 850.00
4444
Circular Saw
150 45.00 125.00
我遇到了这种错误
http://i.stack.imgur.com/CHfGp.png
基本上我的代码看起来像这样
public class console {
public static void main(String[] args) throws IOException {
Scanner inFile = new Scanner(new FileReader("items.in"));
//products
int itemCount = inFile.nextInt();
Vector<item> pList = new Vector<item>();
double totalProfitForItem = 0.0;
double totalSellingvalueForItem = 0.0;
double totalAmount = 0.0;
int totalStock = 0;
String itemID;
String itemName;
int pcsInStore;
double manufPrice;
double sellingPrice;
int j;
for (int i = 0; i < itemCount; i++) {
itemID = inFile.nextLine();
itemName = inFile.nextLine();
pcsInStore = inFile.nextInt();
manufPrice = inFile.nextDouble();
sellingPrice = inFile.nextDouble();
item s = new item(itemID, itemName, pcsInStore, manufPrice, sellingPrice, totalSellingvalueForItem, totalProfitForItem);
pList.addElement(s);
totalAmount += totalSellingvalueForItem;
totalStock += pcsInStore;
}
for( j = 0; j < pList.size(); j++) {
System.out.printf("%5s %5s %5.2f %.2f \n", pList.elementAt(j).getItemID(), pList.elementAt(j).getItemName(), pList.elementAt(j).totsell(), pList.elementAt(j).totprof());
totalSellingvalueForItem = pList.elementAt(j).totsell();
totalAmount += totalSellingvalueForItem ;
}
System.out.println("\n");
System.out.println("Total Amount of Inventory: " + totalAmount +"0");
System.out.println("Number of Items in the Store: " + totalStock);
}
}
答案 0 :(得分:1)
那是因为nextDouble
/ nextInt
仅读取 double
/ int
值,而不会读取'\n'
/ nextLine
您在读取号码后按,因此将在nextLine
中使用。
这方面的一个解决方案是在“真实”之前添加另一个'\n'
,以“吞下”nextLine
,以便您可以在第二个'\n'
中读取实际值。
关于InputMismatchException
,这个:
由扫描程序抛出,表示检索到的令牌没有 匹配预期类型的模式
由于上面提到的内容,可能是nextInt
或nextDouble
中{{1}}被读取的结果。
答案 1 :(得分:1)
nextDouble
和nextInt
分别仅读取double或int值,但会忽略每行末尾的不可见“\ n”。因此,当您继续阅读下一个项目时,它会尝试将“\ n”作为int或double读取,从而导致InputMismatchException
。一个解决方案是在读取一个数字并丢弃该值(不将其存储在一个变量中)后执行.nextLine()
,以便读取“\ n”并在将来忽略它。