【问题标题】:Reading values from a text file and separating into String and double从文本文件中读取值并分成 String 和 double
【发布时间】:2016-10-21 06:10:48
【问题描述】:

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

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

【问题讨论】:

    标签: java arraylist java.util.scanner


    【解决方案1】:

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

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

    【讨论】:

    • 感谢蒂姆,您的分隔符也与我的代码一起使用。我将研究在 API 中检查它,以了解它如何更好地理解分隔符。再次感谢。
    • 需要等待 30 秒,直到溢出允许我这样做
    【解决方案2】:

    usedelimite() 方法设置Scanner 对象的分隔符。基本上是Scanner 对象用来标记字符串的。它主要用于处理文件。 有关 Scanner useDelimiter() 方法的更多详细信息,请参阅以下链接,

    Scanner in Java

    【讨论】:

      猜你喜欢
      • 2016-08-25
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 2014-01-15
      • 2016-02-19
      相关资源
      最近更新 更多