【问题标题】:How to split a line of text containing two dates如何拆分包含两个日期的文本行
【发布时间】:2016-06-05 10:55:11
【问题描述】:

我有这样的问题。不幸的是,我无法编辑任何内容。

en_GB   United States   2015-07-10  2015-08-30  mountains   5,400.20    USD

这是文本文件中的一行。我正在尝试为它准备扫描仪并基于它创建对象。这是我制作的内容以及我可以编辑的内容。

String lang;
String country;
Date[] dates; //contains two dates - arrival and departure
String place;
Double price;
String curr;


public TravelData(String lang, String countryIn, Date[] dateIn, String placeIn, Double priceIn, String currIn)

这就是我的构造函数的样子。我试图使用扫描仪和 next() 方法,但看起来它不适用于日期。在较小的部分上剪切这行文本的最佳方法是什么?

我的扫描仪不工作:)。

public void ReadOffers(File dataDir) throws FileNotFoundException{
    TravelData travel;

    for (final File fileEntry : dataDir.listFiles()) {
        scan = new Scanner(fileEntry);
        while(scan.hasNextLine()){
            String l = scan.next();
            String c = scan.next();
            Date[] d = [Date.parse(scan.next()); Date.parse(scan.next())];
            String pl = scan.next();
            Double pr = Double.parseDouble(scan.next());
            String cu = scan.next();
        travel = new TravelData(l, c, d, pl, pr, cu);
        travelList.add(travel);
        }
    }   
}

【问题讨论】:

  • 我会先检查字段是否从固定位置开始,这样可以方便处理
  • 每个字段都由制表符分隔,但我只能访问三个示例。无论我想之间有多少个标签,它都应该工作。
  • 我会要求制作人提供正式的文件规范。如果有不为人知的细节,你所有的努力都会很快化为乌有。

标签: java file split java.util.scanner


【解决方案1】:

您可以改为使用 BufferedReader 来读取该行,然后 split() 并将其放入一个字符串数组中,如下所示:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileEntry)));
String line;
while(line = br.readNext() != null)
{
     String[] words = line.split(" ");//assuming you want to split based on the whitespace char
    //do what you want to do with the words
}//reapeat as long as there is a line to the file

【讨论】:

    【解决方案2】:

    将它作为一个完整的字符串加载

    String fileContent = new String(readAllBytes(get("test.txt"));
    

    使用 split(regex) 通过正则表达式分隔

    String[] separatedLines = fileContent.split("\n");
    foreach(String s:separatedLines){
        s.split(" ");
        [parse as you wish, like you were doing]
        [do stuff, put results in a list or in another array]
    }
    

    编辑:我读到这些是标签:split("\t*")。 EDIT2:关于日期,检查SimpleDataFormat

    【讨论】:

    • 问题是我没有一个文件。我需要从此文件夹中读取所有文本文件 File dataDir = new File("data")
    • @DanielZawadzki - 我认为这个解决方案仍然可以使用。只需将所有文件的内容一一追加到单个 StringBuilder 中。此外,进行一些异常处理并记录任何无法解析的行;以便您稍后查看。
    猜你喜欢
    • 1970-01-01
    • 2021-01-21
    • 2016-06-02
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多