2013-02-18 94 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