You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取列表中字符串索引并完善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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:20:58