比较忽略重音字符的字符串
Compare strings ignoring accented characters
我想知道是否有一种方法可以比较 2 个字符串并忽略使 "noção" 等于 "nocao" 的重音符号。
它会像 string1.methodCompareIgnoreAccent(string2);
没有内置方法可以执行此操作,因此您必须自己构建:
部分解决方案来自 here:
这首先将所有重音字符拆分为它们的去重音字符,然后是它们的组合变音符号。然后你只需删除所有组合变音符号。
另见
然后您的 equals 方法将如下所示:
import java.text.Normalizer;
import java.text.Normalizer.Form;
public boolean equals(Object o) {
// Code omitted
if (yourField.equals(removeAccents(anotherField))) {
return true;
}
}
public static String removeAccents(String text) {
return text == null ? null : Normalizer.normalize(text, Form.NFD)
.replaceAll("\p{InCombiningDiacriticalMarks}+", "");
}
您可以使用 java 整理器来比较忽略重音的测试,请看一个简单的例子:
import java.text.Collator;
/**
* @author Kennedy
*/
public class SimpleTest
{
public static void main(String[] args)
{
String a = "nocao";
String b = "noção";
final Collator instance = Collator.getInstance();
// This strategy mean it'll ignore the accents
instance.setStrength(Collator.NO_DECOMPOSITION);
// Will print 0 because its EQUAL
System.out.println(instance.compare(a, b));
}
}
文档:JavaDoc
我不会详细解释,因为我只使用了一点 Collators 并且我不是这方面的专家,但是你可以 google 有一些关于它的文章。
我想知道是否有一种方法可以比较 2 个字符串并忽略使 "noção" 等于 "nocao" 的重音符号。 它会像 string1.methodCompareIgnoreAccent(string2);
没有内置方法可以执行此操作,因此您必须自己构建:
部分解决方案来自 here: 这首先将所有重音字符拆分为它们的去重音字符,然后是它们的组合变音符号。然后你只需删除所有组合变音符号。 另见
然后您的 equals 方法将如下所示:
import java.text.Normalizer;
import java.text.Normalizer.Form;
public boolean equals(Object o) {
// Code omitted
if (yourField.equals(removeAccents(anotherField))) {
return true;
}
}
public static String removeAccents(String text) {
return text == null ? null : Normalizer.normalize(text, Form.NFD)
.replaceAll("\p{InCombiningDiacriticalMarks}+", "");
}
您可以使用 java 整理器来比较忽略重音的测试,请看一个简单的例子:
import java.text.Collator;
/**
* @author Kennedy
*/
public class SimpleTest
{
public static void main(String[] args)
{
String a = "nocao";
String b = "noção";
final Collator instance = Collator.getInstance();
// This strategy mean it'll ignore the accents
instance.setStrength(Collator.NO_DECOMPOSITION);
// Will print 0 because its EQUAL
System.out.println(instance.compare(a, b));
}
}
文档:JavaDoc
我不会详细解释,因为我只使用了一点 Collators 并且我不是这方面的专家,但是你可以 google 有一些关于它的文章。