简单的方法来从一个Unicode字符串去除口音? [重复](Easy way to remove

2019-07-20 22:11发布

这个问题已经在这里有一个答案:

  • 有没有办法摆脱口音和整个字符串转换为普通的信吗? 10个回答

我想改变这句话:

这将是他的一半。

至 :

这将是他的一半。

有没有一种简单的方法在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];

Answer 1:

最后,我已经通过解决它Normalizer类。

import java.text.Normalizer;

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


Answer 2:

也许最简单,最安全的方式是使用StringUtils从阿帕奇共享郎

StringUtils.stripAccents(String input)

删除字符串附加符号(〜=重音)。 案件将不会改变。 举例来说,“A”将被“A”代替。 请注意,连字将保持原样。

StringUtils的。 stripAccents()



Answer 3:

我想唯一的区别是,我使用+而不是[]相比于溶液中。 我认为这两部作品,但它是更好地在这里有它。

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


Answer 4:

您正在使用Java 6或更高版本假设,你可能想看看Normalizer ,能分解口音,然后用正则表达式来剥离结合口音。

否则,你应该能够实现使用相同的结果ICU4J



Answer 5:

对于科特林

fun stripAccents(s: String): String 
{
    var string = Normalizer.normalize(s, Normalizer.Form.NFD)
    string = Regex("\\p{InCombiningDiacriticalMarks}+").replace(string, "")
    return  string
}


Answer 6:

谢谢

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( “这将是他的一半。”);



文章来源: Easy way to remove accents from a Unicode string? [duplicate]