我正在尝试使用BufferedReader读取文件,并且在分割每行文件时我想将第8个位置的字符串数据转换为float。(计数从0数据开始)
下面是我的代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class TestFloat {
static BufferedReader bin;
String line;
void sumAmount() throws IOException //Perform calculation
{
bin = new BufferedReader(new FileReader("D:\\Extras\\file.txt"));
//String firstline = bin.readLine();
while ((line = bin.readLine()) != null)
{
String data[] = line.split(",");
//System.out.println(data[8]);
System.out.println(Float.valueOf(data[8]));
//System.out.println(java.lang.Float.parseFloat(data[8]))
}
}
public static void main(String[] args)
{
TestFloat ts = new TestFloat();
try {
ts.sumAmount();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
对于这段代码我得到例外如下:
Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at java.lang.Float.valueOf(Float.java:416)
at TestFloat.sumAmount(TestFloat.java:17)
at TestFloat.main(TestFloat.java:24)
file.txt的一个示例行是:
20,20160518,262,20160518,00,F&O ABC DEBIT F 160518,000405107289,000405006220,5000000.00,5000000.00,0.00,,
我已尝试使用parseFloat和valueOf这两个函数但它显示异常。失败背后的原因是什么?
答案 0 :(得分:0)
java.lang.NumberFormatException:empty String
因错误声明您正在尝试解析空string
。
一种解决方案是使用if
语句来保护NumberFormatException
(仅为空strings
,即你仍然可以得到NumberFormatException
1}} for for unfarseable strings
)。
if(data[8] != null && data[8].length() > 0){
System.out.println(Float.valueOf(data[8]));
System.out.println(java.lang.Float.parseFloat(data[8]));
}
您需要逐步完成调试器,看看它背后的真正问题是什么。