在哪里可以找到一组特定的排序规则,用于字符串的相等比较?
我们都知道,使用 String 的 equals() 方法进行相等比较会失败得很惨。相反,应该使用Collator,如下所示:
// we need to detect User Interface locale somehow
Locale uiLocale = Locale.forLanguageTag("da-DK");
// Setting up collator object
Collator collator = Collator.getInstance(uiLocale);
collator.setStrength(Collator.SECONDARY);
collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
// strings for equality testing
String test1 = "USA lover Grækenland støtte";
String test2 = "USA lover graekenland støtte";
boolean result = collator.equals(test1, test2);
现在,此代码有效,除非 uiLocale 设置为丹麦语,否则结果为 true。在这种情况下,它将产生假。我当然理解为什么会发生这种情况:这只是因为methods是这样实现的:
return compare(s1, s2) == Collator.Equal;
此方法调用用于排序的方法,并检查字符串是否相同。它们不是,因为丹麦语特定的排序规则要求在ae之后(如果我正确理解比较方法的结果)对æ进行排序。但是,这些字符串实际上是相同的,具有这种强度,大小写差异和此类兼容性字符(这就是其名称)应被视为相等。
为了解决这个问题,人们将使用RurBasedCollator与适用于相等情况的特定规则集。
最后的问题是:有谁知道我在哪里可以获得这样的特定规则(不仅对于丹麦语,而且对于其他语言),以便兼容性字符,连字等被视为平等(CLDR图表似乎不包含此类规则,或者我搜索失败)?
或者也许我想在这里做一些愚蠢的事情,我真的应该简单地使用UCA进行相等比较(请任何代码示例)?