java - 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
解决方案
的结果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+"
应该可以解决您的问题
推荐阅读
- unity3d - Unity3D,“敲掉”类型的灯光对象?
- node.js - 无法理解猫鼬中的连接
- android - JSON 文件的 MIME 类型
- ios - 自定义leftBarButtonItem未在swift 4中显示
- kubernetes - Kubernetes pod 访问不提容器端口
- ios - 异常:“指定的 URL 具有不受支持的方案。仅支持 http 和 https URL”
- jfreechart - 我可以为 JFreeChart 使用 Memento 设计模式吗?
- java - 将字符串转换为始终保留两位小数的 BigDecimal
- ios - Xcode 对成员“init”的模糊引用
- c# - WebClient 下载文件损坏