需要从文件中读取String和Double

时间:2016-04-30 04:32:19

标签: java string double java.util.scanner

我在尝试从txt文件中读取String和Double时遇到了一些麻烦。 这是我的txt文件:

Mike 300.50
John 260
Lisa 425.33

以下是我用来阅读它们的代码:

reader = new Scanner();
while(reader.hasNext()){
    name= reader.next();
    salary = reader.nextDouble();
    System.out.println(name + " " + salary + "\r\n");
}

每当我运行此代码时,Exception in thread "main" java.util.InputMismatchException似乎都会告诉我问题出在nextDouble()

有人知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

CREATE INDEX table1_idx ON table1 (date_column) include (text)

试试这个。发生的事情是扫描仪在每两次后读取空行,因此名称将为空行,并且它将读取(例如)John作为工资,并给出该异常。 所以我所做的就是添加一小段代码:reader = new Scanner(); while(reader.hasNext()){ name= reader.next(); salary = reader.nextDouble(); System.out.println(name + " " + salary + "\r\n"); reader.nextLine(); } 所以它可以跳过那条空行。希望这可以帮助。

答案 1 :(得分:0)

您可以尝试这种方式:

while(reader.hasNextLine()){
    String[] values = reader.nextLine().split("\\s+");
    name= values[0];
    salary = Double.valueOf(values[1]);
    System.out.println(name + " " + salary + "\r\n");
}

答案 2 :(得分:-1)

你可以使用java.io.StreamTokenizer来读取String和double。 StreamTokenizer将文件拆分为具有合适数据类型的标记。 通过使用一些常量,您可以识别令牌类型。 比如TT_NUMBER,TT_WORD

File f=new File("path of file");
StreamTokenizer st=new StreamTokenizer(new FileInputStream(file));
while(st.nextToken()!=StreamTokenizer.TT_EOF)   //getting contents of file{
    switch(st.ttype)
    {
        case StreamTokenizer.TT_EOF: break;
        case StreamTokenizer.TT_NUMBER://it will read number always in double data type
            no=st.nval;
        break;
        case StreamTokenizer.TT_WORD:
            name=st.nval;
        break;
    }}