如何对字符串列表排序并动态处理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
相关产品推荐
相关产品推荐

