首先,我使用Excel中的Rand()公式生成了一个随机值列表,并将列表转换为Csv文件格式,当在Java中读取此csv时,我收到错误:
Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at SatelliteView.UrlSatelliteImage.main(UrlSatelliteImage.java:60)
我不知道如何解决此错误,因为我创建的任何其他列表工作正常 下面是正常工作的代码:
文件文件=新文件(csvFile); //创建一个文件以使我们能够读取位置文件的内容
try {
Scanner sc = new Scanner(file);
sc.useDelimiter("\n");
sc.next(); // ignores header row
while (sc.hasNext()) { // loops through csv
String csvRows = sc.next(); // streams next line
String[] csvLocations = csvRows.split(",");
String latitude = csvLocations[0];
double x = Double.parseDouble(latitude);
String longitude = csvLocations[1];
double y = Double.parseDouble(longitude);
System.out.println(csvLocations[0] + " " + csvLocations[1]);
}
sc.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
现在,输出会读取并打印所需的所有值,但会出现异常错误。代码本身适用于手动输入的普通csv文件值但我不确定是否使用Rand()公式生成这些值也创建了一些需要以某种方式省略的新内容。有人有什么想法吗?提前谢谢你。
答案 0 :(得分:1)
错误说明java.lang.NumberFormatException: empty String
和at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
这意味着您尝试将empty String
解析为Double
这个附加在这里
double x = Double.parseDouble(latitude);
或在这里
double y = Double.parseDouble(longitude);
所以基本上你正在阅读的字符串可能不包含任何坐标(可能是空行)。将您的while
循环更改为此,它可能会有效。 (我还添加了更多日志,以便您可以看到它发生了什么)
while (sc.hasNext()) { // loops through csv
String csvRows = sc.next();
// print out the line value to see what we are dealing with
System.out.println("rawTextValue: " + csvRows);
// if the line is not empty
if(!csvRows.isEmpty()) {
String[] csvLocations = csvRows.split(",");
System.out.println(csvLocations[0] + " " + csvLocations[1]);
String latitude = csvLocations[0];
double x = Double.parseDouble(latitude);
System.out.println("x: " + x);
String longitude = csvLocations[1];
double y = Double.parseDouble(longitude);
System.out.println("y: " + y);
}
}