如何获取列表中字符串索引并完善userCompare排序方法?
问题解答
1. 如何获取列表/数组中某字符串的索引?
在你的代码中,定义了一个String[] alphabety数组(建议修正拼写为alphabet)。要获取某个字符字符串(如"a"、"b")在该数组中的索引,可以先将数组转换为List<String>,再调用indexOf()方法实现:
import java.util.Arrays; // 示例用法 String target = "c"; int index = Arrays.asList(alphabety).indexOf(target); // 对于"c",index的值为2
注意:由于你的数组包含了所有小写字母且无重复,因此目标字符必然存在;若目标不在数组中,indexOf()会返回-1。
2. 完善后的userCompare方法实现
其实无需将字符串拆分为字符数组进行比较,Java的String.compareTo()方法已经可以直接完成字典序比较。以下是符合排序规则的简洁实现:
public int userCompare(String s1, int i1, String s2, int i2) { // 优先比较姓名的字典序 int nameCompareResult = s1.compareTo(s2); if (nameCompareResult != 0) { // 若s1字典序小于s2,返回-1;否则返回1 return nameCompareResult < 0 ? -1 : 1; } // 姓名相同时,比较ID if (i1 < i2) { return -1; } else if (i1 > i2) { return 1; } else { // 姓名和ID都相同 return 0; } }
实现说明:
s1.compareTo(s2)会返回一个整数:若s1字典序小于s2则为负数,大于则为正数,相等则为0。- 先判断姓名比较结果,若不为0则直接返回对应排序值;若姓名相同,再比较ID大小,返回对应结果。
如果你坚持要使用自己的思路(通过字母数组逐个字符比较),也可以这样实现,但这种方式冗余且效率更低:
import java.util.Arrays; public int userCompare(String s1, int i1, String s2, int i2) { String[] alphabet = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}; String[] firstChars = s1.split("(?!^)"); String[] secondChars = s2.split("(?!^)"); // 逐个字符比较,直到找到差异 int minLen = Math.min(firstChars.length, secondChars.length); for (int i = 0; i < minLen; i++) { int idx1 = Arrays.asList(alphabet).indexOf(firstChars[i]); int idx2 = Arrays.asList(alphabet).indexOf(secondChars[i]); if (idx1 != idx2) { return idx1 < idx2 ? -1 : 1; } } // 若已比较的字符都相同,比较姓名长度 if (firstChars.length != secondChars.length) { return firstChars.length < secondChars.length ? -1 : 1; } // 姓名完全相同,比较ID if (i1 < i2) { return -1; } else if (i1 > i2) { return 1; } else { return 0; } }
内容的提问来源于stack exchange,提问作者Tanmay Sharma
相关产品推荐
相关产品推荐

