java - 从文本文件中读取值并分为字符串和 double

标签 java arraylist java.util.scanner

我的代码出现此错误: 线程“main”中的异常 java.util.InputMismatchException
我知道错误的原因,整行都被转换为字符串,但我不确定如何修复它。我尝试阅读定界符 **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

我不会更改或删除文件中的空格。 对于如何提取这些值的任何帮助或建议,我将不胜感激。我很高兴根据要求提供更多代码,但我希望这就是所需要的。 再次感谢,我感谢我得到的任何帮助。

最佳答案

从文件的外观来看,分隔符要么是制表符和空格的某种组合(项目名称和编号之间的分隔字符),要么是每行末尾的换行符。

在这种情况下,您的分隔符应该是 \\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 类似的代码测试了您的输入文件,它似乎可以正常工作。

关于java - 从文本文件中读取值并分为字符串和 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40169522/

相关文章:

java - ArrayList 不通过套接字更新内容

java - 数组列表取消移位

java - 按预定义的顺序读取输入

java - 餐厅账单,初始化错误

Java 异常(java.util.InputMismatchException)

java - 如何在java中为多行输入n个空格?

java - 如何在我的 LibGDX 游戏中分享屏幕截图?

java - 使用 CXF 生成的客户端时意外的包装器元素

java - 如何将 ant multirootfileset 转换为标准文件集?

java - ArrayList 索引始终为 0(零)