我目前正在构建一个基于 icu4j 的音译 Web 界面。自动检测用户输入查询是什么的脚本系统的最佳方法是什么?
例如如果输入是“ body ”或“ body ”,我如何/应该识别它来自哪个脚本系统?
最佳答案
最简单的方法是检查第一个字符的脚本:
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;
}
关于java - 如何从 UTF-8 输入中检测脚本系统/字母表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27047223/