首页 > 解决方案 > Java Scanner hasNext() 跳过空行

问题描述

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

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

为什么这个异常会引发 vorvalues[2]而不是values [1]

编辑:带有标签(总共 5 个)标记的日志文件的崇高文本屏幕截图: 在此处输入图像描述

编辑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] + " " + values[2]);结果是java.lang.ArrayIndexOutOfBoundsException

标签: javajava.util.scannernext

解决方案


的结果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+"应该可以解决您的问题


推荐阅读