线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“”
我试图访问simulation.log文件中的两个字符串值,并将这两个值转换为long类型。这是日志文件的例子:线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“”
当我试图访问它告诉自己的字符串是空值。我得到的错误是:
我的代码如下(我理解的说法是不完全关闭):
File file = new File(simulationLogDir + "/simulation.log");
FileReader simulationLogReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(simulationLogReader);
StringBuffer stringBuffer = new StringBuffer();
String line;
while ((line = bufferedReader.readLine()) != null) {
String[] fields = line.split("\t");
long responseTime = Long.parseLong(fields[5]) - Long.parseLong(fields[4]);
if (line.startsWith("REQUEST")) {
if (fields[7].equals("OK")) {
addPassedTest(fields[1], new Request(fields[4],responseTime, fields[7]));
}
在模拟日志的每一行是由标签空格分隔所以字段数组分隔每个字符串。
请仔细检查您的文件是否有错误键入的空格。
基于我注意到的。第8行(两个parseLongs)非常容易受到异常的影响,或者我们可以说可以抛出NumberFormatException,尤其是当它解析非数字字符串时。
这是什么时候发生的?基于问题的标题线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“”,我敢肯定你的文件中有一行的实例在标签后面有一个空格并巧合地由Long.parseInt(string num)解析;
为了更进一步解释,我会给你2样本情况。
情况1: 。在你的文件中的一行看起来像这样
请求(标签)test_12345_54321(标签)1(标签)的MacBook请求(标签)(空间)1490183061440(制表)1490183061321(制表符)行
这条线将然后以这样的方式如下劈裂:
领域[ 0] = REQUEST
领域[1] = test_12345_54321
领域[2] = 1个
领域[3] =的MacBook请求
领域[4] =(空间)1490183061440
领域[5] = 1490183061321个
领域[6] = OK
解析第四指数和第五指数将是:
Long.parseLong(fields [4]) - >空格无法解析为NumberFormatException的结果
长。parseLong(字段[5])= 1490183061321 - >工作正常
情况2: 。在你的文件中的行看起来像这样
REQUEST(制表符)test_12345_54321 (tab)1(tab)Macbook Request(tab)1490183061440(tab)(space)(tab)1490183061321(tab)OK
这条线将被分割成s UCH方式如下:
字段[0] = REQUEST
领域[1] = test_12345_54321
领域[2] = 1个
领域[3] =的MacBook请求
领域[4] = 1490183061440个
领域[5] =(空间)
领域[5] = 1490183061321个
领域[6] = OK
解析第四指数和第五指数将是:
的Long.parseLong(字段[4])= 1490183061440 - >工作正常
的Long.parseLong(字段[5]) - >空间不能被解析为结果NumberFormatException的
请出示日志文件和文本中的例外,而不是作为截图 – SilverNak
检查是否有文件中的两个连续的标签。 –
@ammoQ谢谢!这不是问题,但它允许我弄清楚它正在阅读我没有用过的文件的一行。谢谢你快速的回复。 –