这个问题在这里已有答案:
我想改变这句话:
这将是他的一半。
至 :
这将是他的一半。
有没有一种简单的方法在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];
最后,我通过使用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;
}
也许最简单和最安全的方法是使用StringUtils
的Apache Commons Lang
StringUtils.stripAccents(String input)
从字符串中删除变音符号(〜=重音符号)。案件不会改变。例如,'à'将替换为'a'。请注意,连字将保持原样。
StringUtils.stripAccents()
我想唯一的区别是我使用+
而不是[]
与解决方案相比。我认为两者都有效,但最好还能在这里使用它。
String normalized = Normalizer.normalize(input, Normalizer.Form.NFD);
String accentRemoved = normalized.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
假设您使用的是Java 6或更新版本,您可能需要查看可以分解重音的Normalizer
,然后使用正则表达式去除组合重音。
否则,您应该能够使用ICU4J
获得相同的结果。
对于kotlin
fun stripAccents(s: String): String
{
var string = Normalizer.normalize(s, Normalizer.Form.NFD)
string = Regex("\\p{InCombiningDiacriticalMarks}+").replace(string, "")
return string
}
谢谢
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(“那将是他的一半。”);