简单的方法来从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é。”);