需要从文件中读取 String 和 Double
Need to read String and Double from file
我在尝试从 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()
。
有人知道怎么解决吗?
你可以这样试试:
while(reader.hasNextLine()){
String[] values = reader.nextLine().split("\s+");
name= values[0];
salary = Double.valueOf(values[1]);
System.out.println(name + " " + salary + "\r\n");
}
你可以使用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;
}}
reader = new Scanner();
while(reader.hasNext()){
name= reader.next();
salary = reader.nextDouble();
System.out.println(name + " " + salary + "\r\n");
reader.nextLine();
}
试试这个。发生的事情是扫描器在每次加倍后读取空行,所以 name 将是空行,它会读取(例如)John 作为薪水,并给你那个例外。
所以我所做的就是添加那一小行代码:reader.nextLine();
这样它就可以跳过那行空行。希望这可以帮助。
我在尝试从 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()
。
有人知道怎么解决吗?
你可以这样试试:
while(reader.hasNextLine()){
String[] values = reader.nextLine().split("\s+");
name= values[0];
salary = Double.valueOf(values[1]);
System.out.println(name + " " + salary + "\r\n");
}
你可以使用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;
}}
reader = new Scanner();
while(reader.hasNext()){
name= reader.next();
salary = reader.nextDouble();
System.out.println(name + " " + salary + "\r\n");
reader.nextLine();
}
试试这个。发生的事情是扫描器在每次加倍后读取空行,所以 name 将是空行,它会读取(例如)John 作为薪水,并给你那个例外。
所以我所做的就是添加那一小行代码:reader.nextLine();
这样它就可以跳过那行空行。希望这可以帮助。