Java 如何从UTF-8输入检测脚本系统/字母表?

Java 如何从UTF-8输入检测脚本系统/字母表?,java,unicode,utf-8,icu,Java,Unicode,Utf 8,Icu,我目前正在基于icu4j构建一个音译web界面。自动检测用户输入查询的脚本系统的最佳方法是什么 例如,如果输入是身体里 或者,我怎样才能/应该如何识别这是从哪个脚本系统来的?最简单的方法是检查第一个字符的脚本: static Character.UnicodeScript getScript(String s) { if (s.isEmpty()) { return null; } return Character.UnicodeScript.of(s.c

我目前正在基于icu4j构建一个音译web界面。自动检测用户输入查询的脚本系统的最佳方法是什么


例如,如果输入是身体里 或者,我怎样才能/应该如何识别这是从哪个脚本系统来的?

最简单的方法是检查第一个字符的脚本:

static Character.UnicodeScript getScript(String s) {
    if (s.isEmpty()) {
        return null;
    }
    return Character.UnicodeScript.of(s.codePointAt(0));
}
更好的方法是找到最常出现的脚本:

static Character.UnicodeScript getScript(String s) {
    int[] counts = new int[Character.UnicodeScript.values().length];

    Character.UnicodeScript mostFrequentScript = null;
    int maxCount = 0;

    int n = s.codePointCount(0, s.length());
    for (int i = 0; i < n; i = s.offsetByCodePoints(i, 1)) {
        int codePoint = s.codePointAt(i);
        Character.UnicodeScript script = Character.UnicodeScript.of(codePoint);

        int count = ++counts[script.ordinal()];
        if (mostFrequentScript == null || count > maxCount) {
            maxCount = count;
            mostFrequentScript = script;
        }
    }

    return mostFrequentScript;
}
static Character.UnicodeScript getScript(字符串s){
int[]counts=new int[Character.UnicodeScript.values().length];
Character.UnicodeScript mostFrequentScript=null;
int maxCount=0;
int n=s.codePointCount(0,s.length());
对于(int i=0;imaxCount){
最大计数=计数;
mostFrequentScript=脚本;
}
}
返回mostFrequentScript;
}

非常感谢。不知何故,我忽略了这个名为(int codePoint)的小方法。这是我的建议