我的代码出错了:
线程“main”中的异常java.util.InputMismatchException
我知道错误的原因,整行被转换为String,但我不确定如何解决它。我试过阅读分隔符**Exception in thread "main" java.util.InputMismatchException** How do I use a delimiter in Java Scanner?
但这对我的理解水平来说听起来太复杂了
我的代码:
import java.util.*;
import java.io.*;
public class POSmain{
public static void main(String[] args)throws Exception {
其他代码
//create 3 collections to store input, with scanners to extract input
Map<String, Double> products = new TreeMap<String, Double>();
Scanner stock = new Scanner(new File("prices.txt"));
我尝试使用分隔符
失败了 //Delimiter to remove whitespace
stock.useDelimiter("\\s*[a-z]\\s");
更多代码
//populate each collection with while loops
while(stock.hasNext()){
tempString = stock.nextLine();
tempdouble = stock.nextDouble();
products.put(tempString,tempdouble);
}
stock.close();
尝试阅读此文件:
TV 999.99
Table 199
Bed 499.99
Chair 45.49
Milk 3.00
Butter 2.84
Tomato 0.76
Onion 0.54
Lettuce 1.00
Ham 2.50
Bread 1.75
我不会更改或删除文件中的空格。 我非常感谢有关如何提取价值的任何帮助或建议。我很乐意根据要求提供更多代码,但我希望这是所有必需的。 再次感谢,我感谢任何帮助。
答案 0 :(得分:3)
根据文件的外观,您的分隔符可以是制表符和空格的某种组合(项目名称和数字之间的分隔字符),或每行末尾的换行符。< / p>
在这种情况下,您的分隔符应为\\s+
,表示一个或多个空白字符。所以你的代码应该是这样的:
Map<String, Double> products = new TreeMap<String, Double>();
Scanner stock = new Scanner(new File("prices.txt"));
stock.useDelimiter("\\s+");
while (stock.hasNext()) {
tempString = stock.nextLine();
tempdouble = stock.nextDouble();
products.put(tempString,tempdouble);
}
stock.close();
我使用类似于IntelliJ上面的代码测试了您的输入文件,它似乎正在工作。
答案 1 :(得分:0)
usedelimite()方法设置Scanner对象的分隔符。基本上,Scanner对象使用它来标记字符串。它基本上用于处理文件。
有关扫描仪useDelimiter()
方法的详细信息,请参阅以下链接,