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

Java如何不使用java.util.Arrays实现字符串不区分大小写排序

解决方案

原代码的核心问题是直接比较字符的ASCII码值,而ASCII编码规则里所有大写字母(取值范围6590)都小于小写字母(取值范围97122),因此会出现所有大写字母整体排在小写字母前面的结果,不符合「不区分大小写排序、同字母大写在前」的需求。

调整思路如下:

  • 比较两个字符的优先级时,先统一转为小写(或大写)做第一层比较,保证不同字母跨大小写按字母顺序排序
  • 如果转成小写后值相等,说明是同一个字母的大小写形态,此时让大写字符排在前面即可

修改后可直接运行的代码:

String str = "bbDeaAcCc";
char[] strArr = str.toCharArray();
char temp = 0;

for (int i = 0; i < str.length(); i++) {
    for (int j = 0; j < str.length(); j++) {
        // 统一转小写做第一层排序
        char jLower = Character.toLowerCase(strArr[j]);
        char iLower = Character.toLowerCase(strArr[i]);
        if (jLower > iLower) {
            // 字母顺序靠后,交换位置
            temp = strArr[i];
            strArr[i] = strArr[j];
            strArr[j] = temp;
        } else if (jLower == iLower) {
            // 同字母时大写排在前面:如果j位是小写、i位是大写则交换
            if (Character.isLowerCase(strArr[j]) && Character.isUpperCase(strArr[i])) {
                temp = strArr[i];
                strArr[i] = strArr[j];
                strArr[j] = temp;
            }
        }
    }
}
// 输出验证:AabbCccDe
System.out.println(new String(strArr));

Character属于java.lang包,是JDK默认导入的基础类,不需要额外引入包。如果你连Character类的方法都不想调用,也可以通过ASCII范围手动实现大小写判断:

  • 转小写逻辑替换为:c >= 'A' && c <= 'Z' ? c + 32 : c
  • 大写判断逻辑替换为:c >= 'A' && c <= 'Z'
    替换后完全不需要依赖任何JDK工具类,纯原生逻辑即可实现需求。

内容的提问来源于stack exchange,提问作者theroxkymountains

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:36:03