You need to enable JavaScript to run this app. Java日语本地化排序如何将拉丁字符调整到排序结果末尾
优惠活动
大模型
产品
解决方案
定价
更多

Java日语本地化排序如何将拉丁字符调整到排序结果末尾

Java日语混合字符串排序实现方案

默认Locale.JAPANESE对应的Collator排序规则会将拉丁字符优先级置于日文字符之前,仅靠原生Collator无法直接实现你的需求,可通过自定义双层比较逻辑实现,代码改动极小:

实现思路

  • 第一层优先判断字符串首字符的所属字符集,将所有日文开头的内容排序优先级设为高于拉丁开头的内容
  • 第二层对同一字符集的内容,依旧调用原生日语Collator保证本地化排序规则生效

完整代码示例

import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;

public class JapaneseSort {
    // 判断字符串是否以日文字符开头(覆盖汉字、平假名、片假名、全角符号等日文场景)
    private static boolean isJapaneseStart(String str) {
        if (str == null || str.isEmpty()) return false;
        char firstChar = str.charAt(0);
        Character.UnicodeBlock block = Character.UnicodeBlock.of(firstChar);
        return block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
                || block == Character.UnicodeBlock.HIRAGANA
                || block == Character.UnicodeBlock.KATAKANA
                || block == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS;
    }

    public static void main(String[] args) {
        final Collator jpCollator = Collator.getInstance(Locale.JAPANESE);
        List<String> objects = new ArrayList<>();

        objects.add("Alpha");
        objects.add("家事問屋");
        objects.add("ベータ");
        objects.add("Beta");

        Collections.sort(objects, (s1, s2) -> {
            boolean s1Jp = isJapaneseStart(s1);
            boolean s2Jp = isJapaneseStart(s2);
            // 日文内容优先排在前面
            if (s1Jp && !s2Jp) return -1;
            if (!s1Jp && s2Jp) return 1;
            // 同类内容用原生日语排序规则
            return jpCollator.compare(s1, s2);
        });

        System.out.println(objects);
    }
}

输出结果

运行上述代码后输出为:[家事問屋, ベータ, Alpha, Beta],完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 11:57:04