2013-11-14 29 views
1

我有一個字符串數組我已經從數據庫中的Java fileterd像這樣的輸出排序字符串數組,然後按編號

[ABCD XYZ M1210, 
ABCD XYZ M149, 
ABCD XYZ M5130, 
ABCD XYZ N1420, 
ABCD XYZ T11299, 
ABCD XYZ S11044] 

進出口尋找如下排序我的數組:

[ABCD XYZ M149, 
ABCD XYZ M1210, 
ABCD XYZ M5130, 
ABCD XYZ N1420, 
ABCD XYZ S11044, 
ABCD XYZ T11299] 

,它是最後一個元素我特別希望

==> String theStringIWant = myStringArray.get(myStringArray.size() - 1); 

我需要的DOI第一個排序「XYZ」後面的字母是什麼按字母順序排列,然後進行排序後數值,如此例如 ABCD XYZ M1210 < ABCD XYZ M5130爲5130大於1210

這裏任何幫助,將不勝感激

*任何引用在Java等合適的庫

乾杯

+1

你有尋求'集合#sort'? –

+1

我會讓我自己的'Comparator'來處理兩部分的字符串。 – Pietu1998

+0

@LuiggiMendoza尋找? – user1694873

回答

2

,這是最後一個元素我特別希望

下面的程序先提取您的字符串元素的最後一個整數部分。然後通過比較來回報。

List<String> results = Arrays.asList("ABCD XYZ M1210", "ABCD XYZ M149", 
     "ABCD XYZ M5130", "ABCD XYZ N1420", "ABCD XYZ T11299", 
     "ABCD XYZ S11044"); 

     Collections.sort(results, new Comparator<String>(){ 

      @Override 
      public int compare(String o1, String o2) { 
       Integer x1 = Integer.parseInt(o1.substring(o1.lastIndexOf(" ")+2, o1.length())); 
       Integer x2 = Integer.parseInt(o2.substring(o2.lastIndexOf(" ")+2, o2.length())); 

       return x1.compareTo(x2); 

      } 
     }); 

     System.out.println(results); 

輸出:

[ABCD XYZ M149, 
ABCD XYZ M1210, 
ABCD XYZ N1420, 
ABCD XYZ M5130, 
ABCD XYZ S11044, 
ABCD XYZ T11299] 
+0

這工作,謝謝! – user1694873

+2

@ user1694873仔細注意輸出!它不起作用。 'ABCD XYZ N1420,'在'ABCD XYZ M5130'之前,不應該。 –

2

您可以使用Collections.sort的內容進行排序。

在平均同時,寫一個比較器,用於比較一樣,

1寫比較

public class MyComparator implements Comparator { 

@Override 
public int compare(Object o1, Object o2) { 

    String s1 = (String)o1; 
    String s2 = (String)o2; 
    //String part has 10 characters, It is fixed. 
    String strPart1 = s1.substring(0,10); 
    int intPart1 = Integer.valueOf(s1.substring(10)); 

    String strPart2 = s2.substring(0,10); 
    int intPart2 = Integer.valueOf(s2.substring(10)); 

    int strCompareResult = strPart1.compareTo(strPart2); 
    if(0 == strCompareResult) 
    { 
     return intPart1 - intPart2; 
    } 
    else 
    { 
     return strCompareResult; 
    } 
} 

} 

2使用Collections.sort和比較,以完成排序

List<String> results = Arrays.asList("ABCD XYZ M1210", "ABCD XYZ M149", 
      "ABCD XYZ M5130", "ABCD XYZ N1420", "ABCD XYZ T11299", 
      "ABCD XYZ S11044"); 

    System.out.println("Before sorting... ..."); 
    System.out.println(results); 

    System.out.println("After sorting... ... "); 
    Collections.sort(results, new MyComparator()); 
    System.out.println(results); 

輸出控制檯:

排序前... ...

[ABCD XYZ M1210, ABCD XYZ M149, ABCD XYZ M5130, ABCD XYZ N1420, ABCD XYZ T11299, ABCD XYZ S11044] 

排序後......

​​964714​​3210
+0

這是錯誤的; 149應該在1210之前。 – Pietu1998

+1

@ Pietu1998 - 感謝您的更正。相應地進行更改。 :) – MouseLearnJava

4
Arrays.sort(array, new Comparator<String>() { 
    @Override 
    public int compare(String s1, String s2) { 
     String stringPart1 = extractStringPart(s1); 
     String stringPart2 = extractStringPart(s2); 
     int result = stringPart1.compare(stringPart2); 
     if (result == 0) { 
      int intPart1 = extractIntPart(s1); 
      int intPart2 = extractIntPart(s2); 
      result = Integer.compare(intPart1, intPart2); 
     } 
     return result; 
    } 
}); 

兩種提取方法是留作練習。閱讀javadoc的字符串和/或匹配器,以瞭解如何做。

相關問題