Java 如何跳过读入文件上的字符串以获得后面的浮点值?
我试图读取一个给定的文件,该文件由不同的属性组成,我要给一个类的“worker”,这些属性由属性名给出,然后是一个与worker相关的浮点数,即:Fabrication.25 服务.45 诊断学.65 我试图使用scanner仅检索浮点值,但在尝试使用s.nextFloat()时出现异常错误;我不确定如何分割整个字符串,以便只返回浮点值Java 如何跳过读入文件上的字符串以获得后面的浮点值?,java,exception,Java,Exception,我试图读取一个给定的文件,该文件由不同的属性组成,我要给一个类的“worker”,这些属性由属性名给出,然后是一个与worker相关的浮点数,即:Fabrication.25 服务.45 诊断学.65 我试图使用scanner仅检索浮点值,但在尝试使用s.nextFloat()时出现异常错误;我不确定如何分割整个字符串,以便只返回浮点值 import java.io.File; import java.io.FileNotFoundException; import java.util.Scan
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Worker
{
public static void main(String args[]) throws FileNotFoundException
{
//creating File instance to reference text file in Java
// File text = new File("Workers.txt");
//Creating Scanner instance to read File in Java
//File text = new File("Workers.txt");
Scanner s = new Scanner(new File("Workers.txt"));
TheWorker one = new TheWorker(s);
System.out.println(one.Fab);
s.close();
}
}
class TheWorker
{
String workername;
String type;
String CanWork = "Any";
float hourlyRate;
float Fab;
float Serv;
float Diag;
float Trans;
float Intake;
float BW;
float Paint;
boolean working;
public TheWorker(Scanner s)
{
workername = s.nextLine();
String type = s.next();
if(type != "Full-Time")
{
String temp = s.next();
if (temp.charAt(0) == '(')
{
CanWork = temp.substring(1,temp.length()-1);
temp = s.next();
}
hourlyRate = Float.parseFloat(temp);
}
Fab = s.nextFloat();
Serv = s.nextFloat();
Diag = s.nextFloat();
Trans = s.nextFloat();
Intake = s.nextFloat();
BW = s.nextFloat();
Paint = s.nextFloat();
}
TheWorker(String workername, String type, String CanWork, float hourlyRate, float Fab, float Serv, float Diag, float Trans, float Intake, float BW, float Paint, boolean working)
{
this.workername = workername;
this.type = type;
this.CanWork = CanWork;
this.hourlyRate = hourlyRate;
this.Fab = Fab;
this.Serv = Serv;
this.Diag = Diag;
this.Trans = Trans;
this.Intake = Intake;
this.BW = BW;
this.Paint = Paint;
this.working = working;
}
}
====Snippet from Workers.txt===
Eikichi Onizuka
Part-Time (Afternoon) 8.00 phr
Fabrication .35
Service/Mechanics .25
Diagnostics .25
Brake/Transmission .25
Intake/Exhaust .15
Body Work .25
Paint/Finish .45
Yusuke Urameshi
Part-Time (Afternoon) 7.60 phr
Fabrication .35
Service/Mechanics .55
Diagnostics .05
Brake/Transmission .35
Intake/Exhaust .45
Body Work .15
Paint/Finish .15
Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseFloat(Unknown Source)
at java.lang.Float.parseFloat(Unknown Source)
at TheWorker.<init>(Worker.java:60)`enter code here`
at Worker.main(Worker.java:18)
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.Scanner;
公社工人
{
公共静态void main(字符串args[])引发FileNotFoundException
{
//在Java中创建引用文本文件的文件实例
//文件文本=新文件(“Workers.txt”);
//在Java中创建扫描仪实例以读取文件
//文件文本=新文件(“Workers.txt”);
扫描仪s=新扫描仪(新文件(“Workers.txt”);
工人1=新工人;
System.out.println(一个Fab);
s、 close();
}
}
工人阶级
{
字符串工作名称;
字符串类型;
字符串CanWork=“Any”;
浮动小时利率;
浮动晶圆厂;
浮动服务;
浮动诊断;
浮动变速器;
浮式进水口;
浮动BW;
浮法漆;
布尔运算;
公共卫生工作者(s)
{
workername=s.nextLine();
字符串类型=s.next();
如果(类型!=“全职”)
{
字符串temp=s.next();
如果(温度字符(0)='(')
{
CanWork=临时子字符串(1,临时长度()-1);
temp=s.next();
}
hourlyRate=Float.parseFloat(温度);
}
Fab=s.nextFloat();
Serv=s.nextFloat();
Diag=s.nextFloat();
Trans=s.nextFloat();
摄入=s.nextFloat();
BW=s.nextFloat();
Paint=s.nextFloat();
}
工人(字符串工作名称、字符串类型、字符串可工作、浮动小时率、浮动制造、浮动服务、浮动诊断、浮动变速器、浮动进气、浮动BW、浮动油漆、布尔工作)
{
this.workername=workername;
this.type=type;
this.CanWork=CanWork;
this.hourlyRate=hourlyRate;
这个.Fab=Fab;
this.Serv=Serv;
this.Diag=Diag;
这个。Trans=Trans;
这个。摄入=摄入;
this.BW=BW;
这个。油漆=油漆;
这个。工作=工作;
}
}
==Workers.txt中的代码段===
大野荣吉
兼职(下午)8.00份
制造业
服务/机械师
诊断学25
刹车/变速器
进气/排气
身体工作
油漆/面漆
宇之介
兼职(下午)7.60份
制造业
服务/机械
诊断学.05
刹车/变速器
进气/排气
身体工作
油漆/面漆
线程“main”java.lang.NumberFormatException中的异常:空字符串
位于sun.misc.FloatingDecimal.readJavaFormatString(未知源)
在sun.misc.FloatingDecimal.parseFloat处(未知源)
位于java.lang.Float.parseFloat(未知源)
在Worker.(Worker.java:60)`这里输入代码`
at Worker.main(Worker.java:18)
根据您的输入文件,您应该
8.00
phr
-只有arr[1]是浮点数制造.35
仅arr[1]是浮点
参见在我看来,这个练习是从文本文件创建一个
Worker
对象的集合
首先,让我们看看如何使用扫描器
类读取文本文件。类扫描器
有一个构造函数,该构造函数采用。但是路径
是一个接口,因此您需要使用类来创建适当的路径
Path p=Path.get(“Workers.txt”);
扫描仪s=新扫描仪(p);
现在,您可以使用扫描仪
逐行读取文件
while(s.hasNextLine()){
字符串行=s.nextLine();
}
这基本上就是读取文件所需的所有代码。现在,您希望使用文件中的数据创建
Worker
对象。我将假设该文件与您发布的示例具有相同的格式,即每个“工作人员”详细信息正好占用九行,其中第一行是工作人员的姓名,每个“工作人员”之间用一个空行分隔。每一行都需要自己的特殊处理,因此我将管理一个
计数器
变量来告诉我刚才读取的工作人员详细信息。当我读取空行时,我知道我拥有单个“工作人员”的所有详细信息
此外,我将把我创建的所有Worker
对象存储在一个集合中,确切地说是一个集合
import java.io.IOException;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
公社工人{
私有字符串工作名;
私有字符串类型;
私有字符串canWork=“Any”;
私人浮动小时利率;
私人浮动晶圆厂;
私人浮动服务;
私有浮动诊断;
私人浮动交易;
私人浮式取水口;
私人浮动bw;
私人浮漆;
私人布尔运算;
//建造师
公共工作者(字符串工作者名称,
字符串类型,
弦可以工作,
浮动小时利率,
浮动晶圆厂,
浮动服务,
浮动诊断,
浮动变速器,
浮式进水口,
浮动bw,
浮漆,
布尔运算){