3

我有以下字符。

Ą¢¥ŚŠŞŤŹŽŻąľśšşťźžżÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãääåæçèéêêêêìííîïðñòóôõöøùúûüýÿÿ

我需要转换为

AcYSSSTZZZalssstzzzAAAAAAACEEEEIIIIDNOOOOOOUUUUYTSaaaaaaaceeeeiiiionooooooouuuuyty

我正在使用 Java 1.4。

Normalizer.decompose(text, true, 0).replaceAll("\p{InCombiningDiacriticalMarks}+", ""); 仅用变音符号替换字符。

像 ¢¥ÆÐÞßæðøþ 这样的字符没有被转换。

我该怎么做,在 JDK 1.4 中进行转换的有效方法是什么。

请帮忙。

问候, Sridevi

4

3 回答 3

7

查看ICU 项目,尤其是 icu4j 部分。课程将Transliterator解决您的问题。

这是一个Transliterator将任何脚本转换为拉丁字符并删除任何重音符号和非 ascii 字符的示例:

Transliterator accentsConverter = Transliterator.getInstance("Any-Latin; NFD; [:M:] Remove; NFC; [^\\p{ASCII}] Remove");

Any-Latin部分执行转换,NFD; [:M:] Remove; NFC删除重音符号并[^\\p{ASCII}] Remove删除任何剩余的非 ascii 字符。

你只需要打电话accentsConverter.transliterate(yourString)就可以得到结果。

您可以在ICU 转换指南中阅读有关如何构建转换 ID(的参数Transliterator.getInstance)的更多信息。

于 2012-04-17T09:44:19.037 回答
3

我该怎么做,在 JDK 1.4 中进行转换的有效方法是什么。

最有效的方法是使用实​​现为数组或HashMap. 但是,当然,您需要填充表格。

像 ¢¥ÆÐÞßæðøþ 这样的字符没有被转换。

好吧,这些字符都不是真正的罗马字母,也不能翻译成罗马字母……如果不对语义采取令人发指的自由的话。例如:

  • ¢ 和 ¥ 是货币符号,
  • Æ 和 æ 是连字,在某些语言中代表两个字母,而在其他语言中则是一个不同的字母,
  • ß 是双 s 的德语表示。
于 2012-04-17T09:30:50.217 回答
2

我会做这样的事情;

针对 Java 1.4 更新(删除了泛型)

public class StringConverter {

    char[] source = new char[]{'Ą', '¢', '¥', 'Ś'}; // all your chars here...
    char[] target = new char[]{'A', 'c', 'Y', 'S'}; // all your chars here...
    //Build a map
    HashMap map;

    public StringConverter() {
        map = new HashMap();
        for (int i = 0; i < source.length; i++) {
            map.put(new Character(source[i]), new Character(target[i]));
        }
    }

    public String convert(String s) {
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            chars[i] = map.get(chars[i]);
        }
        return new String(chars);
    }

}
于 2012-04-17T09:41:30.190 回答