从文本文件中读取值并分成String和double

时间:2016-10-21 06:10:49

标签: java arraylist java.util.scanner

我的代码出错了:  线程“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

我不会更改或删除文件中的空格。 我非常感谢有关如何提取价值的任何帮助或建议。我很乐意根据要求提供更多代码,但我希望这是所有必需的。 再次感谢,我感谢任何帮助。

2 个答案:

答案 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()方法的详细信息,请参阅以下链接,

Scanner in Java

相关问题