如何比较非英语字符与重音符号

我想比较其中有两个非英文字符的字符串

String1 = debarquer String2 = débárquér 

在比较上面两个字符串时,他们应该说相等。

使用Collat​​or类。 它允许您设置强度和区域设置,它将适当地比较字符。

它应该是类似的东西(注意:我没有测试过该程序)

 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。 这显然不太好。 使用collat​​or类可以正确处理。

为此,您可以使用Java的Normalizer类。 只需将字符串规范化,然后删除变音标记,如下所示:

 String stripAccents(String string) { string = Normalizer.normalize(string, Normalizer.Form.NFD); string = string.replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); } 

然后,您可以使用它来比较两个字符串减去重音:

 stripAccents(string1).equals(stripAccents(string2)) 
 //add null check for string1 if(string1.equals(string2)){ //print/return equals } else{ //print/return not equal } 
 if (string1 != null){ if (string1.equals(string2)){ System.out.println("Equal"); } else{ System.out.println("Not Equal"); } 

有一种方法可以比较java中的2个字符串值。

  if(String1.equals(String2)) { System.out.println("Equal"); } else { System.out.println("Not equal"); }