作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个程序,该程序应该按字母顺序对两个字符串进行排序,如果 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 循环上,我不允许它遍历整个字符串,但我不确定如何修复它。
最佳答案
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;
}
关于java - 一个不使用compare.To按字母顺序对字符串进行排序的程序(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29069053/
我是一名优秀的程序员,十分优秀!