2010-04-12 66 views
2

我想排序從最早到最新的日期。 我正在考慮使用bufferedreader,並嘗試搜索字符串的前2個字符,然後是第4個和第5個字符,最後是第7個和第8個字符,忽略斜槓。按日期排序文本文件 - 日期看起來像DD/MM/YYYY

以下是文本文件I具有的一個示例:

2010年4月24日 - 2000.0(存款)

09/05/2010 - 20.0(費用)

02 /二千零七分之三十零 - 600.0(存款)

2009年6月15日 - 200.0(費用)

2010年8月23日 - 300.0(存款)

06/05/2006 - 500.0(費用)

+0

歡迎來到SO,John!除了僅檢查年份中的兩位數字之外,您的算法似乎會成功。你有關於它的問題嗎? – Pops 2010-04-12 18:20:59

+0

謝謝你的歡迎。我剛剛開始編程,我試圖把我的頭圍繞在很多這個。 – 2010-04-13 18:25:40

回答

0

該文件有多大?我只想讀每一行,爲每個行的日期對象,然後調用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)和寫入。

0

使用SimpleDateFormat將您的日期更改爲所需的格式,然後對其進行排序。

2

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

這杵與您的日期更改爲使用SimpleDateFormatgetField(String line)應該讓你去所需的格式。

+0

我注意到,它並不允許重複的字符串,當我試圖運行它,按記在你給我鏈接說爲好。另外,當我運行排序時,它將它放入一行。至於SimpleDateFormat,我會使用我假設的MM/DD/YYYY。 感謝您的幫助! – 2010-04-13 17:23:57

+1

是的,地圖也不會允許重複鍵。所以,你可能要在地圖中的值更改爲'列表'使代碼看起來像(只爲理念,爲了給代碼;沒有編譯/測試) ' 名單記錄; ((line = reader.readLine())!= null)if(map.get(getField(line)!= null){else} { }其他{ 記錄=新的ArrayList ();} records.add(線); map.put(getfield命令(線),記錄);} ' 同樣寫入記錄了將處理'名單的循環'值在地圖上。 – 2010-04-13 19:30:39