在Java中将拉丁字符转换为普通文本

时间:2012-04-17 09:26:35

标签: java

我有以下字符。

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

我需要转换为

AcYSSSTZZZalssstzzzAAAAAAACEEEEIIIIDNOOOOOOUUUUYTSaaaaaaaceeeeiiiionoooooouuuuyty

我正在使用Java 1.4。

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

¢¥ÆÐÞßæðøþ等字符未被转换。

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

请帮忙。

此致 诗丽黛玮·阿雅潘

3 个答案:

答案 0 :(得分:6)

查看ICU project,尤其是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 Transformations guide中详细了解如何构建转化ID(Transliterator.getInstance的参数)。

答案 1 :(得分:3)

  

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

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

  

¢¥ÆÐÞßæðøþ等字符未被转换。

这些人物中没有一个是真正的罗马字母,也不能翻译成罗马字母......没有用语义来取得蛮横的自由。例如:

  • ¢和¥是货币符号,
  • Æ和æ是连字符,在某些语言中代表两个字母,而在其他语言中则是一个独特的字母,
  • ß是double-s的德语表示。

答案 2 :(得分: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);
    }

}