有没有一种方法可以检查Java在读取文本文件时是否已经开始读取文本文件中的新行



我正在创建一个读取大块数据的程序,我需要将它们分离,我想知道java中是否有一个函数可以在java开始读取新行时通知我,顺便说一句,我使用扫描仪读取文本文件,如果有任何变化,这些文件也是CSV文件。

我试着在网上寻找解决这个问题的方法,也阅读了扫描仪的一些功能,但找不到任何有用的

公共类ScannerReading{

public static void main(String[] args) throws FileNotFoundException {
File file = new File("C:\myfile.txt");
Scanner scanner = new Scanner(file);
scanner.useDelimiter(",");
String data = scanner.nextLine();
data = scanner.nextLine();
while(scanner.hasNext()){
if(data.contains("  ")) {
System.out.println("I have a line lol");
}
System.out.print(data+" ");
}
scanner.close();
}

}

我期待第1行的输出:从第一行中提取的信息

您的问题的直接答案是,当您使用Scanner::next/Scanner::hasNext时,无法确定您是否刚刚开始一个新行。更普遍地说,没有办法找出最后一个分隔符是什么。分隔符将被丢弃。

正如JB Nizet所说,有很多现有的开源CSV阅读器库,因此不需要使用Scanner来实现此功能。事实上,正确实现CSV读取并非易事,尤其是当您需要实现头、引用、转义和/或延续行时。建议使用现有的库。

但是,如果(违背建议!)您决定直接实现阅读器,那么一种更稳健的方法是使用嵌套循环:

  • 外循环使用nextLine读取完整的行
  • 内部循环为每一行创建一个Scanner,以将其拆分为字段

除了不处理引号、转义符、连续行等。真正的问题是CSV语法没有一个简单的上下文无关的分隔符。

我想我可能会使用某种计数器来计算[字段]

是的。。。但如果CSV中的某些行缺少字段(例如,由于人为错误),则对字段进行计数将无法检测到这一点。

最新更新