我正在尝试阅读一个文字文件:
Cycle [numberOfWheels=4.0, weight=1500.0]
代码正确运行但它无法识别双打。
输出为:Cycle [numberOfWheels= 0.0, weight= 0.0]
。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Cycle {
public static double numberOfWheels;
public static double weight;
public Cycle(double numberOfWheels, double weight)
{
this.numberOfWheels=numberOfWheels;
this.weight=weight;
}
@Override
public String toString() {
return "Cycle [numberOfWheels= " + numberOfWheels + ", weight= " + weight
+ "]";
}
public static void main(String[] args) throws FileNotFoundException
{
// TODO Auto-generated method stub
File text = new File("C:/Users/My/workspace/CycleOutput/Cycle.txt");
try {
Scanner sc = new Scanner(text);
while (sc.hasNextDouble())
{
numberOfWheels=sc.nextDouble();
}
while (sc.hasNextDouble())
{
sc.next();
}
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
Cycle cycle1=new Cycle(numberOfWheels, weight);
System.out.println(cycle1.toString());
}
}
答案 0 :(得分:0)
Scanner
使用空格作为分隔符。由于您的文件在数字之间没有空格,因此它显示为[numberOfWheels=4.0,
,而不仅仅是4.0
。
只需使用Scanner.next()
即可获得整行,并使用substring
获取各个数字。
答案 1 :(得分:0)
您应手动解析复杂输入,例如通过词法解析器(antlr)或使用regexp:
Scanner sc = new Scanner(new StringReader("Cycle [numberOfWheels=4.0, weight=1500.0]\n"));
Pattern pattern = Pattern.compile("Cycle\\s*\\[numberOfWheels=(.*),\\s*weight=(.*)\\]");
while (sc.hasNextLine()) {
Matcher matcher = pattern.matcher(sc.nextLine());
if (matcher.matches()) {
return new Circle(
Double.parseDouble(matcher.group(1)),
Double.parseDouble(matcher.group(2))
);
}
}