从 Eclipse 中的文本文件中读取列式数据
Reading column-wise data from a text file in Eclipse
我正在使用 Eclipse 与 CPLEX 一起对车辆路径问题进行建模。我需要从文本文件中读取数据(需求点坐标、时间 windows 等)。数据是按列排列的,所以我使用了一个拆分函数来存储我的变量。但是,控制台在第一行数据本身显示错误。
代码:
public class VRP01k {
public static void main(String args[]) throws FileNotFoundException{
//Scanner input = new Scanner(new File("C:\OR Research\Code\data01.txt"));
Scanner input = new Scanner(new File("data01.txt"));
String line = input.nextLine();
while(line != null) {
String[] columns = line.split("\t");
xPos[count] = Double.parseDouble(columns[0]);
yPos[count] = Double.parseDouble(columns[1]);
d[count] = Double.parseDouble(columns[2]);
a[count] = Double.parseDouble(columns[3]);
b[count] = Double.parseDouble(columns[4]);
s[count] = Double.parseDouble(columns[5]);
count++;
line = input.nextLine();
}
我尝试直接使用 C 盘中的文件并将其移动到我的 Java 项目中。两者都不起作用。错误如下:
Exception in thread "main" java.lang.NumberFormatException: For input string: "3.00 38.00 0.00 0.00 1187.00 0.00"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at VRP01k.main(VRP01k.java:32)
数据文件的前几行是:
3.00 38.00 0.00 0.00 1187.00 0.00
44.00 28.00 0.00 342.00 365.00 0.00
26.00 44.00 0.00 20.00 93.00 0.00
7.00 41.00 0.00 0.00 45.00 0.00
17.00 28.00 0.00 250.00 292.00 0.00
请帮忙。谢谢。
这是新代码:
public class VRP01k {
public static void main(String args[]) throws FileNotFoundException{
//Scanner input = new Scanner(new File("C:\OR Research\Code\data01.txt"));
Scanner input = new Scanner(new File("data01.txt"));
String line = input.nextLine();
while(line != null) {
String [] columns = line.trim().split("\s+");
xPos[count] = Double.parseDouble(columns[0]);
yPos[count] = Double.parseDouble(columns[1]);
d[count] = Double.parseDouble(columns[2]);
a[count] = Double.parseDouble(columns[3]);
b[count] = Double.parseDouble(columns[4]);
s[count] = Double.parseDouble(columns[5]);
count++;
line = input.nextLine();
}
错误:
Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at VRP01k.main(VRP01k.java:32)
您的异常表明输入的数字格式有误:
"3.00 38.00 0.00 0.00 1187.00 0.00"
所以您的 split
实际上并没有拆分输入字符串,只是将整行传递给第一个 Double.parseDouble
。
很可能您在数字之间有空格而不是制表符。所以使用类似的东西:
String [] columns = line.trim().split("\s+");
为了拆分。这是在进行拆分之前修剪前导和尾随空格以使事情变得更容易,然后拆分一个或多个 'space' 个字符 - 这将处理空格和制表符。
我正在使用 Eclipse 与 CPLEX 一起对车辆路径问题进行建模。我需要从文本文件中读取数据(需求点坐标、时间 windows 等)。数据是按列排列的,所以我使用了一个拆分函数来存储我的变量。但是,控制台在第一行数据本身显示错误。
代码:
public class VRP01k {
public static void main(String args[]) throws FileNotFoundException{
//Scanner input = new Scanner(new File("C:\OR Research\Code\data01.txt"));
Scanner input = new Scanner(new File("data01.txt"));
String line = input.nextLine();
while(line != null) {
String[] columns = line.split("\t");
xPos[count] = Double.parseDouble(columns[0]);
yPos[count] = Double.parseDouble(columns[1]);
d[count] = Double.parseDouble(columns[2]);
a[count] = Double.parseDouble(columns[3]);
b[count] = Double.parseDouble(columns[4]);
s[count] = Double.parseDouble(columns[5]);
count++;
line = input.nextLine();
}
我尝试直接使用 C 盘中的文件并将其移动到我的 Java 项目中。两者都不起作用。错误如下:
Exception in thread "main" java.lang.NumberFormatException: For input string: "3.00 38.00 0.00 0.00 1187.00 0.00"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at VRP01k.main(VRP01k.java:32)
数据文件的前几行是:
3.00 38.00 0.00 0.00 1187.00 0.00
44.00 28.00 0.00 342.00 365.00 0.00
26.00 44.00 0.00 20.00 93.00 0.00
7.00 41.00 0.00 0.00 45.00 0.00
17.00 28.00 0.00 250.00 292.00 0.00
请帮忙。谢谢。
这是新代码:
public class VRP01k {
public static void main(String args[]) throws FileNotFoundException{
//Scanner input = new Scanner(new File("C:\OR Research\Code\data01.txt"));
Scanner input = new Scanner(new File("data01.txt"));
String line = input.nextLine();
while(line != null) {
String [] columns = line.trim().split("\s+");
xPos[count] = Double.parseDouble(columns[0]);
yPos[count] = Double.parseDouble(columns[1]);
d[count] = Double.parseDouble(columns[2]);
a[count] = Double.parseDouble(columns[3]);
b[count] = Double.parseDouble(columns[4]);
s[count] = Double.parseDouble(columns[5]);
count++;
line = input.nextLine();
}
错误:
Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at VRP01k.main(VRP01k.java:32)
您的异常表明输入的数字格式有误:
"3.00 38.00 0.00 0.00 1187.00 0.00"
所以您的 split
实际上并没有拆分输入字符串,只是将整行传递给第一个 Double.parseDouble
。
很可能您在数字之间有空格而不是制表符。所以使用类似的东西:
String [] columns = line.trim().split("\s+");
为了拆分。这是在进行拆分之前修剪前导和尾随空格以使事情变得更容易,然后拆分一个或多个 'space' 个字符 - 这将处理空格和制表符。