用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.text.Normalizer所有内容。

我不是Java人,但我建议使用Normalizer类来分解重音字符,然后删除Unicode “COMBINING”字符。

你将不得不做一个循环:

 String text = "Je prends une thé chaud, s'il vous plaît"; Map replace = new HashMap(); replace.put('é', "e"); replace.put('î', "i"); replace.put('è', "e"); StringBuilder s = new StringBuilder(); for (int i=0; i 

注意:某些字符将替换为多个字符。 例如,在德语中,u-umlaut被转换为“ue”。

编辑:使它更有效率。

据我所知,目前还没有标准的方法,但是这里有一个可以满足您需求的课程:

http://www.javalobby.org/java/forums/t19704.html

你需要一个循环。

一个有效的解决方案将如下所示:

  Map map = new HashMap(); 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(); 

当然,在实际程序中,您将封装地图的构造和各自方法中的替换。