2014-03-19 117 views
-1

如何比較數字字符串?Java - 比較數字字符串

我保存在文件中的字符串:

"2000 12 7 0 2 -3.0" 
"2000 7 7 0 2 -4.0" 
"2013 7 23 20 59 25.5" 

首先5個值是日期(年,月,日,小時,分鐘)。我需要按照時間順序排列

這裏是我的代碼:

class Task3 { 

    BufferedWriter writer; 
    BufferedReader reader; 
    int licznik = 0; 



    Task3() throws IOException { 
     this.writer = new BufferedWriter(new FileWriter("c:\\zadanie.txt")); 
     this.reader = new BufferedReader(new FileReader("c:\\zadanie.txt")); 

    } 

    public void WriteMeasur(Measur measur) throws IOException{ 

     //licznik++; 
     writer.write(measur.toString()); 
     writer.newLine(); 
    } 

    public void WriteChrono(Measur measur) throws IOException{ 
     List<String> lista = new ArrayList<>(); 

     String line;   
     while((line = reader.readLine()) != null){ 
      lista.add(line);    
     } 
    } 
} 

class Time implements Serializable{ 
    int year, month, day, hour, minute; 

    Time(int r, int m, int d, int h, int min){ 
     if(r <= 2014 && r > 1990) 
      this.year = r; 
     if(m <= 12) 
      this.month = m; 
     if(d <= 30 || (m == 2 && d < 29)) 
      this.day = d; 
     if(h <= 24) 
      this.hour = h; 
     if(min <= 60) 
      this.minute = min; 
    } 

    @Override 
    public String toString(){ 
     return String.valueOf(year) + " " + String.valueOf(month) + " " +String.valueOf(day) + " " +String.valueOf(hour) + " " +String.valueOf(minute); 

    } 
} 
class Measur implements Serializable{ 
    Time time; 
    double temp; 

    Measur(Time czas, double temp){ 
     this.time = czas; 
     this.temp = temp; 

    } 

    @Override 
    public String toString(){ 
     return time.toString() + " " +String.valueOf(temp); 

    } 

} 

public class Main{ 
    public static void main(String args[]) throws IOException{ 

     //Argumenty klasy czas: rok, miesiac, dzien, godzina, minuty 
     // Metody inicjujace klase czas 

     Time czas_1 = new Time(2013,7,23,20,59); 
     Time czas_3 = new Time(2000,07,7,25,2); 
     Time czas_2 = new Time(2000,12,7,25,2); 

     // Metody inicjujace klase pomiar 

     Measur pomiar_1 = new Measur(czas_1, 25.5); 
     Measur pomiar_2 = new Measur(czas_2, -3); 
     Measur pomiar_3 = new Measur(czas_3, -4); 


     Task3 zad3 = new Task3(); 

     zad3.WriteMeasur(pomiar_1); 
     zad3.WriteMeasur(pomiar_2); 
     zad3.WriteMeasur(pomiar_3); 
     zad3.writer.close(); 

    } 
} 

我不知道如何對它進行排序。我想用Collections.sort(),但在絃樂2000 12越小則7. 2000年

有什麼建議?

謝謝!

+1

你必須看看SimpleDateFormat的 - http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html – Leo

+1

你應該實現[比較](HTTP://文檔。 oracle.com/javase/7/docs/api/java/util/Comparator.html),或許還有一個[GregorianCalendar的](http://docs.oracle.com/javase/7/docs/api/java/util/ GregorianCalendar.html#的GregorianCalendar%28int,%20int,%20int,%20int,%20int%29)。 –

回答

3

我不知道這是一個好主意或沒有。但是你可以使用Collections.sort支持Comparator定製其中,而他們被分到和SimpleDateFormat的值轉換爲Date值,然後可以直接比較...例如值進行比較的方式......

List<String> values = new ArrayList<String>(25); 
values.add("2013 7 23 20 59 25.5"); 
values.add("2000 12 7 0 2 -3.0"); 
values.add("2000 7 7 0 2 -4.0"); 

Collections.sort(values, new Comparator<String>() { 
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy MM dd"); 
    @Override 
    public int compare(String o1, String o2) { 
     int result = -1; 
     try { 
      Date d1 = sdf.parse(o1); 
      Date d2 = sdf.parse(o2); 
      result = d1.compareTo(d2); 
     } catch (ParseException exp) { 
      exp.printStackTrace(); 
     } 
     return result; 
    } 
}); 

for (String value : values) { 
    System.out.println(value); 
} 
+0

它的工作原理! 謝謝! :) –

1

創建自己傳遞在其構造String並解析該字符串初始化year, month, day, hour, min, sec場個人MyDate對象。

然後寫一個自定義ComparatorMyDateComparator類和分發代碼你的邏輯。

Store中的MyDate對象在你的ListString和使用`Collections.sort(myDateList,新MyDateComparator())

關於如何使用Comparators

1

分割字符串與空間技巧,參閱The Ordering Collections Java Tutorials分隔符,轉換成整數數組,然後排序?

+0

行,所以我已經嘗試這樣做,我得到的錯誤:「異常線程‘main’java.lang.NumberFormatException:對於輸入字符串:‘2013723205925’」爲什麼?要int大數,還是什麼? 當我將所有行分割並將其解析爲int時,就發生了這種情況。 謝謝 –