Java Scanner hasNext() 跳过空行

标签 java java.util.scanner

我想要使用的日志文件是制表符分隔的,如下所示:

2019-06-06 10:01:02     1.0
2019-06-06 10:25:12 100.0
2019-06-06 11:02:32     2.0

我使用以下代码扫描文件:

import java.util.*;
import java.io.*;

public class FirstTry {
    public static void main(String[] args) 
    {
        String fileName = "LogFile.csv";
        File file = new File(fileName);
        try
        {
            Scanner inputStream = new Scanner(file);
            while (inputStream.hasNext()){
                String data = inputStream.nextLine();
                String[] values = data.split("\\t");
                System.out.println(values[0] + "    " + values[1]);
            }
            inputStream.close();
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

线路

System.out.println(values[0] + "    " + values[1]);

打印以下工作输出:

2019-06-06 10:01:02    
2019-06-06 10:25:12    100.0
2019-06-06 11:02:32    

但是

System.out.println(values[0] + "    " + values[2]);

打印:

2019-06-06 10:01:02    1.0
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException

为什么这个异常是针对 values[2] 而不是 values[1] 引发的?

编辑: Sublime Text 日志文件的屏幕截图,其中标记了选项卡(总共 5 个): enter image description here

编辑2:

String[] values = data.split("\\t+");
System.out.println(values[0] + "    " + values[1]);

打印:

2019-06-06 10:01:02    1.0
2019-06-06 10:25:12    100.0
2019-06-06 11:02:32    2.0

System.out.println(values[0] + ""+ value[2]);导致 java.lang.ArrayIndexOutOfBoundsException

最佳答案

String[]values = data.split("\\t");的结果

1: ["2019-06-06 10:01:02", "", "1.0"]
2: ["2019-06-06 10:25:12", "100.0"]
3: ["2019-06-06 11:02:32 ", "", "2.0"]

请注意,双重制表将拆分为空字符串。 第 2 行有一个表格,它会导致 ArrayOutOfBoundsException 异常,因为值没有第三个值。

正如 @Thilo 所提到的,对 "\\t+" 进行拆分应该可以解决您的问题

关于Java Scanner hasNext() 跳过空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57603972/

相关文章:

java - calendar.add 在 Android 中无法正常运行

java - 下面的配置是什么意思(jaxb-fluent-api)?

java - 术语 : What do you call a function that does not change object state?

java - 判断字符串是否是 Pangram 的代码?

java - 在 Java 中使用 java.util.Scanner 时出现 InputMismatchException

Java:如何使用扫描仪加载文件?

java - 使用 Fused Location API 和应用程序意外崩溃

java - 如何使用 JBoss Fuse (camel) 将 JSON 解码为多个项目?

java - 从同一输入行读取多个值

java - 使用扫描仪和方法从文件中读取