“线程中的异常”;“主要”;java.lang.NumberFormatException:对于输入字符串:"&引用;

“线程中的异常”;“主要”;java.lang.NumberFormatException:对于输入字符串:"&引用;,java,long-integer,filereader,gatling,Java,Long Integer,Filereader,Gatling,我试图访问simulation.log文件中的两个字符串值,并将这两个值转换为long类型。这是日志文件的一个示例: 当我尝试访问字符串时,它告诉我自己这些是空值。我得到的错误是: 我的代码如下(我理解该声明未完全关闭): 模拟日志中的每一行都用制表符分隔,因此字段数组将分隔每个字符串。总结如下: 仔细检查您的文件是否键入了错误的空格。 根据我所注意到的。第8行(两个ParseLong)真的很容易发生异常,或者我们可以说可以抛出NumberFormatException,特别是当它解析非数字

我试图访问simulation.log文件中的两个字符串值,并将这两个值转换为long类型。这是日志文件的一个示例:

当我尝试访问字符串时,它告诉我自己这些是空值。我得到的错误是:

我的代码如下(我理解该声明未完全关闭):

模拟日志中的每一行都用制表符分隔,因此字段数组将分隔每个字符串。

总结如下: 仔细检查您的文件是否键入了错误的空格。 根据我所注意到的。第8行(两个ParseLong)真的很容易发生异常,或者我们可以说可以抛出NumberFormatException,特别是当它解析非数字字符串时

什么时候发生?根据线程“main”java.lang.NumberFormatException:For input string:“”中问题异常的标题,我很确定您的文件中有一行的实例,该行在制表符后面有一个空格,同时被Long.parseInt(string num)解析

为了进一步解释,我将给你两个例子

情景1: 文件中有一行如下所示

请求(制表符)测试(制表符)1(制表符)Macbook请求(制表符)(空格)1490183061440(制表符)1490183061321(制表符)正常

然后,该行将按如下方式拆分:

字段[0]=请求
字段[1]=test_12345_54321
字段[2]=1
字段[3]=Macbook请求
字段[4]=(空格)1490183061440
字段[5]=1490183061321
字段[6]=正常

解析第四个索引和第五个索引将是:

Long.parseLong(字段[4])->无法将空格作为结果解析为NumberFormatException
Long.parseLong(字段[5])=1490183061321->工作正常


情景2: 文件中有一行如下所示

请求(制表符)测试(制表符)1(制表符)Macbook请求(制表符)1490183061440(制表符)(空格)(制表符)1490183061321(制表符)正常

然后,该行将按如下方式拆分:

字段[0]=请求
字段[1]=test_12345_54321
字段[2]=1
字段[3]=Macbook请求
字段[4]=1490183061440
字段[5]=(空格)
字段[5]=1490183061321
字段[6]=正常

解析第四个索引和第五个索引将是:

Long.parseLong(字段[4])=1490183061440->工作正常
Long.parseLong(字段[5])->无法将空格作为结果解析为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]));
                }