我正在尝试编写一个按字母顺序对两个字符串进行排序的程序,如果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循环,我不允许它遍历整个字符串,但我不确定如何修复它。
答案 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;
}