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

调用Arrays.sort()排序字符数组后打印元素输出空白是什么原因

问题原因

  • 你初始化存储小写字母的ch数组、存储大写字母的chy数组时,直接将长度设为原字符串的总长度,而实际只会填充前k位(小写字母数量)和前l位(大写字母数量),数组剩余未填充的位置默认值为\u0000(ASCII码为0的空字符)。
  • 调用Arrays.sort()对整个数组排序时,空字符的ASCII码远小于大小写字母,会被排到数组最前面,因此你取ch[0]等靠前位置的元素时拿到的都是空字符,打印显示为空白,最终拼接的结果自然也包含大量空字符、看起来是空的。

修复方案

你可以选择任意一种方式修改:

方案1:仅排序数组已填充的区间

调用Arrays.sort的重载方法,指定排序的起止索引,跳过未填充的空字符区域,改动最小:

// 把原来的全数组排序逻辑替换为下面两行即可
Arrays.sort(ch, 0, k);
Arrays.sort(chy, 0, l);

方案2:初始化数组时就使用正确的长度

先统计大小写字母的数量,再创建对应长度的数组,从根源避免空字符的存在:

class Solution
{
    public static String caseSort(String str)
    {
        // 先统计大小写字母数量
        int lowerCnt = 0, upperCnt = 0;
        for(int i=0;i<str.length();i++)
        {
            if(str.charAt(i)>='a'&& str.charAt(i)<='z') lowerCnt++;
            else upperCnt++;
        }
        // 按实际容量初始化数组
        char ch[]=new char[lowerCnt];
        char chy[]=new char[upperCnt];
        int k=0,l=0;
       
        for(int i=0;i<str.length();i++)
        {
            if(str.charAt(i)>='a'&& str.charAt(i)<='z')
            ch[k++]=str.charAt(i);
            else
            chy[l++]=str.charAt(i);
        }
        Arrays.sort(ch);
        Arrays.sort(chy);
       
        int p=0,q=0; String stri="";
        for(int i=0;i<str.length();i++)
        {
          if(str.charAt(i)>='a'&& str.charAt(i)<='z')
          stri=stri+ch[p++];
          else
          stri=stri+chy[q++];
        }
        return stri;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:48:04