【问题标题】:Sorting a text file by date - Date looks like DD/MM/YYYY按日期对文本文件进行排序 - 日期看起来像 DD/MM/YYYY
【发布时间】:2010-04-12 18:17:13
【问题描述】:

我正在尝试将日期从最早到最晚排序。 我正在考虑使用缓冲读取器并尝试搜索字符串的前 2 个字符,然后是第 4 和第 5 个字符,最后是第 7 和第 8 个字符,忽略斜杠。

以下是我拥有的文本文件的示例:

04/24/2010 - 2000.0(存款)

09/05/2010 - 20.0(费用)

02/30/2007 - 600.0(存款)

06/15/2009 - 200.0(费用)

08/23/2010 - 300.0(存款)

06/05/2006 - 500.0(费用)

【问题讨论】:

  • 欢迎来到 SO,约翰!除了您只检查两个年份数字这一事实之外,您的算法似乎会成功。您对此有疑问吗?
  • 感谢您的欢迎。我才刚刚开始编程,我正在努力解决很多这个问题。

标签: java sorting bufferedreader


【解决方案1】:

How do I sort records in a text file using Java?

getField(String line) 中使用SimpleDateFormat 将您的日期更改为所需格式,这应该会让您继续前进。

【讨论】:

  • 我注意到当我尝试运行它时它不允许重复的字符串,正如你给我的那个链接中的注释所说的那样。此外,当我运行排序时,它会将其放在一行中。至于 SimpleDateFormat,我会使用我假设的 MM/DD/YYYY。感谢您的帮助!
  • 是的,地图不允许重复键。因此,您可能希望将 map 中的值更改为 List<String>,以便代码看起来像while((line=reader.readLine())!=null){ if(map.get(getField(line) != null) { records = map.get(getField(line)); } else { records = new ArrayList (); } records.add(line); map.put(getField(line),records); } ` 同样,写出记录的循环将处理映射中的List 值。
【解决方案2】:

使用SimpleDateFormat 将您的日期更改为所需的格式,然后对其进行排序。

【讨论】:

    【解决方案3】:

    文件有多大?我会读入每一行,为每一行创建一个日期对象,然后调用Collections.sort(list<myobjectwithdate>)

    日期提供了一个比较器,因此您可以非常轻松地将所有内容存储在内存中,对其进行排序,然后将其写回文件。

    class LineAndDate implements Comparable{
      private Date date;
      private String line;
    
      public int compareTo( Object other )
      {
        return date.compareTo( ((LineAndDate)other).date;
      }
    
    }
    

    在内存中存储一​​个List<LineAndDate>,然后你应该能够调用Collections.sort(myList) 并写下它。

    【讨论】:

      猜你喜欢
      • 2017-10-06
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多