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

如何对字符串列表排序并动态处理Unicode字符(无需逐个显式检查)

问题:动态处理任意Unicode字符的字符串排序方案

需求

对给定字符串列表中的每个字符串,按字符的Unicode值排序所有字符,输出符合预期的结果。要求无需手动指定特定Unicode字符,程序能自动适配包含任意Unicode字符的输入,无需人工干预。

输入示例

["xL01(F]J","2pn5Mm","-5)8gF{","KWq0P]*%Q","n@,:>Am@","<RN_qCa7","8Qx&RAON","gT~s!1s?4i{K","w\"r^d_#l$Mmp"]

预期输出示例

["(01FJL]x","25Mmnp",")-58Fg{","%*0KPQW]q",",:>@@Amn","7<CNR_aq","&8ANOQRx","!14?KTgiss{~","\"#$M^_dlmprw"]

现有代码的问题

当前代码错误地添加了手动检查并替换特定Unicode字符的逻辑(比如>、<、&),不仅不符合预期输出要求,还无法处理其他Unicode字符,扩展性极差,每次遇到新的特殊字符都需要手动修改代码。

现有代码

public static void main(String[] args) {
    String[] qArray = { "xL01(F]J", "2pn5Mm", "-5)8gF{", "KWq0P]*%Q", "n@,:>Am@", "<RN_qCa7",
            "8Qx&RAON", "gT~s!1s?4i{K", "w\"r^d_#l$Mmp" };
    List<String> aList = new ArrayList<>();
    List<String> qList = Arrays.asList(qArray);
    qList.forEach(qString -> {
        String sorted = sortedString(qString);
        String replacedAndSorted = replaceUnicode(sorted);
        aList.add(replacedAndSorted);
    });
    System.out.println(Arrays.toString(aList.toArray()));
}

public static String sortedString(String str) {
    char[] c = str.toCharArray();
    Arrays.sort(c);
    return new String(c);
}

public static String replaceUnicode(String sorted) {
    String replacedString = sorted;
    char[] c = sorted.toCharArray();
    if (sorted.contains(">")) {
        replacedString = sorted.replace(">",
                "\\u0" + Integer.toHexString(sorted.codePointAt(sorted.indexOf(">"))));
    }
    if (sorted.contains("<")) {
        replacedString = sorted.replace("<",
                "\\u0" + Integer.toHexString(sorted.codePointAt(sorted.indexOf("<"))));
    }
    if (sorted.contains("&")) {
        replacedString = sorted.replace("&",
                "\\u0" + Integer.toHexString(sorted.codePointAt(sorted.indexOf("&"))));
    }
    return replacedString;
}

解决方案

Java中的Arrays.sort(char[])方法本身就是按照字符的Unicode代码点进行排序的,完全支持任意Unicode字符的排序,不需要额外的替换或手动处理逻辑。只需去掉多余的replaceUnicode调用,直接对原字符串的字符数组排序即可。

优化后的代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class StringSort {
    public static void main(String[] args) {
        String[] qArray = { "xL01(F]J", "2pn5Mm", "-5)8gF{", "KWq0P]*%Q", "n@,:>Am@", "<RN_qCa7",
                "8Qx&RAON", "gT~s!1s?4i{K", "w\"r^d_#l$Mmp" };
        List<String> resultList = new ArrayList<>();
        
        for (String inputStr : qArray) {
            resultList.add(sortStringCharacters(inputStr));
        }
        
        System.out.println(Arrays.toString(resultList.toArray()));
    }

    /**
     * 对字符串中的所有字符按Unicode值排序
     */
    public static String sortStringCharacters(String str) {
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        return new String(chars);
    }
}

说明

  • 该代码直接利用Java内置的字符排序逻辑,自动处理所有Unicode字符,包括特殊符号、非ASCII字符等,无需手动指定任何字符类型。
  • 运行后输出结果完全匹配预期示例,且能适配任意包含Unicode字符的输入字符串,无需人工修改代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:07:02