一种程序,按字母顺序对字符串进行排序而不进行比较.To(Java)

时间:2015-03-16 03:04:33

标签: java sorting

我正在尝试编写一个按字母顺序对两个字符串进行排序的程序,如果s1在s2之前,则返回-1,如果s1在s2之后,则返回1,如果它们是相同的单词,则打印0所以对于s1 =“king”和s2 =“kink”,它应该打印-1。我已经成功实现了这个不是以同一个字母开头的单词,但对于那些没有的单词,例如“king”和“kink”,我遇到了困难。

public static int compare(String a, String b)
  {

int comparison = 0;
int c1, c2;
for(int i = 0; i < a.length() && i < b.length(); i++) 
{
    c1 = (int) a.toLowerCase().charAt(i);   
    c2 = (int) b.toLowerCase().charAt(i);   
    comparison = c1 - c2; 

    if(comparison == 0) 
    {
      if(a.length() > b.length())    
         return 1;
      else if (a.length() < b.length())
         return -1;
      else
         return 0;
    }
    else if (comparison > 0)
      return 1;
    else  
      return -1;

}

return comparison;
 }

我觉得问题在于我的for循环,我不允许它遍历整个字符串,但我不确定如何修复它。

1 个答案:

答案 0 :(得分:1)

public static int compare(String a, String b) {
    if (a == null) {
        return b == null ? 0 : -1;
    } else if (b == null) {
        return 1;
    }
    String alow = a.toLowerCase();
    String blow = b.toLowerCase();
    int len = Math.min(a.length(), b.length());
    for (int i = 0; i < len; i++) {
        int d = alow.charAt(i) - blow.charAt(i);
        if (d != 0) {
            return d < 0 ? -1 : 1;
        }
    }
    int diff = a.length() - len;
    if (diff != 0) {
        return diff < 0 ? -1 : 1;
    }
    return 0;
}