1

我正在安装警报,但它们有一个界面,我必须为各个区域命名。问题是他们只能接受英语中不存在的希腊字符,否则他们必须是英语的等价物。例如,如果我写“ΠΑΡΑΘΥΡΟ”,字符 1,2,3,5,6,7 必须用英文输入,因为在外观上与希腊字符相同。但是字符 0 和 4 只能是希腊语。我只关心大写字母。关于如何使用 2 个简单的 jtextfields 的任何想法?谢谢!

4

1 回答 1

3

使用 HashMap 来翻译字符。由于问题域很小并且可能永远不会改变,因此对地图的内容进行硬编码是合理的,如下所示:

private static final Map<Character, Character> GREEK_TO_ROMAN = new HashMap<>();
static {
    GREEK_TO_ROMAN.put('\u0391', '\u0041');  // uppercase alpha
    GREEK_TO_ROMAN.put('\u03A1', '\u0050');  // uppercase rho
    // ...
}

然后获取输入字符串的字符数组,根据需要翻译字符,并从更改后的数组中创建一个新字符串:

String s = "ΠΑΡΑΘΥΡΟ";
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
    Character repl = GREEK_TO_ROMAN.get(chars[i]);
    if (repl != null)
        chars[i] = repl;
    }
s = new String(chars);

JTextField 将如何发挥作用我不太清楚,但也许如果你愿意,你可以将它子类化,覆盖该getText()方法并确保它产生的任何 String 都已转换。

于 2012-07-21T09:25:36.700 回答