[英]Method to substitute foreign for English characters in Java?
在PHP中我会使用这个:
$text = "Je prends une thé chaud, s'il vous plaît";
$search = array('é','î','è'); // etc.
$replace = array('e','i','e'); // etc.
$text = str_replace($search, $replace, $text);
但Java String方法“replace”似乎不接受数组作为输入。 有没有办法做到这一点(不必诉诸于for循环来通过数组)?
请说是否比我正在尝试的方法更优雅。
一个非常好的方法是使用Apache Commons Lang 2.4中StringUtils
类的replaceEach()
方法 。
String text = "Je prends une thé chaud, s'il vous plaît";
String[] search = new String[] {"é", "î", "è"};
String[] replace = new String[] {"e", "i", "e"};
String newText = StringUtils.replaceEach(text,
search,
replace);
结果是
Je prends une the chaud, s'il vous plait
虽然Apache Commons中可能存在某些内容,但没有任何方法与标准API中的PHP相同。 你可以通过单独替换字符来实现:
s = s.replace('é','e').replace('î', 'i').replace('è', 'e');
一个更复杂的方法,不需要你枚举要替换的字符(因此更可能不会遗漏任何东西),但需要一个循环(无论如何在内部发生,无论你使用什么方法)都将使用java.text.Normalizer
分隔字母和变音符号然后删除字符类型为Character.MODIFIER_LETTER
。
我不是Java人,但我建议使用Normalizer类来分解重音字符,然后删除Unicode “COMBINING”字符的通用解决方案。
你将不得不做一个循环:
String text = "Je prends une thé chaud, s'il vous plaît";
Map<Character, String> replace = new HashMap<Character, String>();
replace.put('é', "e");
replace.put('î', "i");
replace.put('è', "e");
StringBuilder s = new StringBuilder();
for (int i=0; i<text.length(); i++) {
char c = text.charAt(i);
String rep = replace.get(c);
if (rep == null) {
s.append(c);
} else {
s.append(rep);
}
}
text = s.toString();
注意:某些字符将替换为多个字符。 例如,在德语中,u-umlaut被转换为“ue”。
编辑:制造这是非常有效。
据我所知,目前还没有标准的方法,但这里有一个可以满足您需求的课程:
你需要一个循环。
一个有效的解决方案将是如下:
Map<Character, Character> map = new HashMap<Character, Character>();
map.put('é', 'e');
map.put('î', 'i');
map.put('è', 'e');
StringBuilder b = new StringBuilder();
for (char c : text.toCharArray())
{
if (map.containsKey(c))
{
b.append(map.get(c));
}
else
{
b.append(c);
}
}
String result = b.toString();
当然,在实际程序中,您将封装地图的构造和各自方法中的替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.