Java 如何将非英语字符与重音进行比较
我想比较两个字符串,其中有一些非英语字符Java 如何将非英语字符与重音进行比较,java,special-characters,string-comparison,Java,Special Characters,String Comparison,我想比较两个字符串,其中有一些非英语字符 String1 = debarquer String2 = débárquér 在比较以上两个字符串时,它们应该表示相等。使用Collator类。它允许您设置强度和区域设置,并适当地比较字符 if (string1 != null){ if (string1.equals(string2)){ System.out.println("Equal"); } else{ System.out.println("Not Equal"); } 它应该与此类似
String1 = debarquer
String2 = débárquér
在比较以上两个字符串时,它们应该表示相等。使用Collator类。它允许您设置强度和区域设置,并适当地比较字符
if (string1 != null){
if (string1.equals(string2)){
System.out.println("Equal");
}
else{
System.out.println("Not Equal");
}
它应该与此类似(注意:我没有测试该程序)
更新:需要注意的一点是,“débárquér”和“debarquer”永远不应该被认为是平等的。但是,如果要对它们进行排序,则不希望根据它们的ASCII值对它们进行比较。以“Joao”和“João”为例:如果您根据ASCII对它们进行排序,您可能会得到Joao、John、João。这显然不好。使用collator类可以正确地处理这个问题。有一种方法可以比较java中的两个字符串值
if(String1.equals(String2))
{
System.out.println("Equal");
}
else
{
System.out.println("Not equal");
}
为此,可以使用Java的类。只需规范化字符串,然后去掉变音符号,如下所示:
String stripAccents(String string) {
string = Normalizer.normalize(string, Normalizer.Form.NFD);
string = string.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
然后,您可以使用它来比较两个字符串减去重音:
stripAccents(string1).equals(stripAccents(string2))
如果
字符串中包含非ascii值,请不要担心。您应该使用s1.equals(s2)
来比较它们,假设两者都是String
s并且没有null
值。if(String1.equals(String2)){/*do something*/}
我倾向于使用equals
方法比较西班牙语中的String
,没有问题。最大的区别是什么?
stripAccents(string1).equals(stripAccents(string2))