我有以下字符。
一个¢¥ŚŠŞŤŹŽŻąľśšşťźžżÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
我需要转换为
AcYSSSTZZZalssstzzzAAAAAAACEEEEIIIIDNOOOOOOUUUUYTSaaaaaaaceeeeiiiionoooooouuuuyty
我正在使用Java 1.4。
Normalizer.decompose(text,true,0).replaceAll( “\ p {InCombiningDiacriticalMarks} +”,“”);只用变音符号替换字符。
¢¥ÆÐÞßæðøþ等字符未被转换。
我该怎么做,在JDK 1.4中进行转换的有效方法是什么。
请帮忙。
此致 诗丽黛玮·阿雅潘
答案 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
的查找表。但是,当然,你需要填充表格。
¢¥ÆÐÞßæðøþ等字符未被转换。
这些人物中没有一个是真正的罗马字母,也不能翻译成罗马字母......没有用语义来取得蛮横的自由。例如:
答案 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);
}
}