【问题标题】:Picking out specific information out a text file with Scanner使用 Scanner 从文本文件中提取特定信息
【发布时间】:2014-06-06 14:32:11
【问题描述】:

我很难找到一种有效的方法来从这种格式的文本文件中提取特定数据,该文件有很多行。

<"Name" "double" "double" "double" [...]> 

双打的数量在 txt 文件的每一行都不同,
我只对 txt 文件中每一行的第一个 double 感兴趣。

我尝试这样做的方式是:

Scanner doubleScan = new Scanner(System.in).useDelimiter("(\\w)(\\s+)");
String[] columnOne = elementScan.next().split(" ");

尝试使用正则表达式使扫描仪期待,但如果一行中的双精度数未知,则实际上不起作用。然后尝试将所有挑选出来的(每行的第一个)双打存储在一个数组中

如果您有任何建议,我们将不胜感激,仅限扫描仪。

【问题讨论】:

  • 如果要解析文件,请使用 Scanner,如果要逐行读取文件,请使用 BufferedReader。
  • 真的必须用Scanner来完成吗?在您的代码示例中,您使用的是split,所以它不是纯扫描仪解决方案。
  • 如果您可以使用split,那么可以使用nextLine() 而不是next() 来获取整行,然后将其拆分为空格并读取结果数组的元素[1]。顺便说一句,您必须循环执行。

标签: java regex


【解决方案1】:

您可以使用scanner.nextLine() 逐行读取,然后使用 plit 方法从数组中取出第二个元素。或者,如果您对只使用扫描仪非常特别,您可以为每行创建另一个扫描仪并使用nextDouble() 方法检查双精度。示例。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Application {
    public static void main(String[] args) {
        try {
            File file = new File("test.txt");
            Scanner fileScanner = new Scanner(file);
            while (fileScanner.hasNext()) {
                Scanner lineScanner = new Scanner(fileScanner.nextLine());
                while (lineScanner.hasNext()) {
                    if (lineScanner.hasNextDouble()) {
                        System.out.println("First Double :" + lineScanner.nextDouble());
                        break;
                    } else {
                        lineScanner.next();
                    }
                }
                lineScanner.close();
            }
            fileScanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

【讨论】:

  • 有用的答案,必须花费相当长的时间来撰写,+1 :)
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 2013-07-02
相关资源
最近更新 更多