2013-02-18 127 views
1

我想在'u'和'v'之間放置字母'h'。我找到了一個解決方案,但我認爲這可以通過更短更好的方式解決。自定義字母順序

public class CustomStringSort 
{ 
    public static void main(String[] args) 
    { 
     String[] abc = "abcdefghijklmnopqrstuvwxyz".split(""); 

     List<String> letters = Arrays.asList(abc); 

     Collections.sort(letters, new MyStringComparator()); 

     for(String letter : letters) 
     { 
      System.out.println(letter); 
     } 
    } 

    static class MyStringComparator implements Comparator<String> 
    { 
     @Override 
     public int compare(String o1, String o2) 
     { 
      if(o1.equals("h") && o2.compareTo("u") <= 0) 
      { 
       return 1; 
      } 

      if(o1.equals("h") && o2.compareTo("v") >= 0) 
      { 
       return -1; 
      } 

      if(o2.equals("h") && o1.compareTo("u") <= 0) 
      { 
       return -1; 
      } 

      if(o2.equals("h") && o1.compareTo("v") >= 0) 
      { 
       return 1; 
      } 

      return o1.compareTo(o2); 
     } 
    } 
} 
+1

考慮http://codereview.stackexchange.com/取得 – 2013-02-18 17:43:35

+2

你正在做的方式似乎是正確的。 – mtk 2013-02-18 17:44:14

+3

小心你只是在交換小寫字母。另外,你需要比較字符串還是字符? – Luciano 2013-02-18 17:44:28

回答

0

我可以建議你用枚舉類型,不知道如何實現,但枚舉自定義列表

+0

我也想過這個。類似於A(1),B(2),C(3)... U(20),H(21),V(22)......其中花括號中的數字是排名。但那不是更好。 – GarfieldKlon 2013-02-18 18:13:17