如何比较非英语字符与重音符号
2022-09-03 05:08:31
我想比较2个字符串,其中有一些非英语字符
String1 = debarquer
String2 = débárquér
在比较上面的2个字符串时,它们应该说相等。
我想比较2个字符串,其中有一些非英语字符
String1 = debarquer
String2 = débárquér
在比较上面的2个字符串时,它们应该说相等。
使用排序规则类。它允许您设置强度和区域设置,并将适当地比较字符。
它应该类似于此(注意:我还没有测试该程序)
import java.text.Collator;
import java.util.Locale;
public class CollatorExp {
public static void main(String[] args) {
Collator collator = Collator.getInstance(Locale.FRENCH);
collator.setStrength(Collator.PRIMARY);
if (collator.compare("débárquér", "debarquer") == 0) {
System.out.println("Both Strings are equal");
} else {
System.out.println("Both Strings are not equal");
}
}
}
更新:需要注意的一点是,“débárquér”和“debarquer”永远不应该被视为平等的。但是,如果您要对它们进行排序,那么您不希望根据它们的ASCII值来比较它们。以“Joao”和“João”为例:如果你根据ASCII对它们进行排序,你可能会得到Joao,John,João。这显然是不好的。使用排序规则器类可以正确处理此问题。
为此,您可以使用Java的Normalizer类。只需规范化字符串,然后去掉变音符号,如下所示:
String stripAccents(String string) {
string = Normalizer.normalize(string, Normalizer.Form.NFD);
string = string.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
然后,您可以使用它来比较两个字符串减去重音符号:
stripAccents(string1).equals(stripAccents(string2))