简单的方法来从string中删除UTF-8口音?

我想改变这个句子:

Etçasera samoitié。

至 :

Et ca sera sa moitie。

有没有一种简单的方法来做到这一点在Java中,就像我在Objective-C中做的那样?

NSString *str = @"Et ça sera sa moitié."; NSData *data = [str dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; NSString *newStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 

最后我解决了它:

 public static String stripAccents(String s) { s = Normalizer.normalize(s, Normalizer.Form.NFD); s = s.replaceAll("[\\p{InCombiningDiacriticalMarks}]", ""); return s; } 

也许最简单和最安全的方法是使用Apache Commons Lang的 StringUtils

 StringUtils.stripAccents(String input) 

从string中删除变音符号(〜=重音符号)。 案件不会被改变。 例如,“à”将被replace为“a”。 请注意,连字将保持原样。

StringUtils的。 stripAccents()

假设你正在使用Java 6或更新的版本,你可能想看看Normalizer ,它可以分解重音,然后使用正则expression式去除组合口音。

否则,您应该能够使用ICU4J获得相同的结果。

我想唯一的区别是,我使用+而不是[]比较解决scheme。 我认为两者都有效,但最好也在这里。

 String normalized = Normalizer.normalize(input, Normalizer.Form.NFD); String accentRemoved = normalized.replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 

谢谢

 public static final Pattern DIACRITICS_AND_FRIENDS = Pattern.compile( "[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+"); private static String stripDiacritics(String str) { str = Normalizer.normalize(str, Normalizer.Form.NFD); str = DIACRITICS_AND_FRIENDS.matcher(str).replaceAll(""); return str; } 

=> stripDiacritics(“EtÇasera samoitié。”);