我在尝试从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()
。
有人知道如何解决这个问题吗?
答案 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;
}}