fra*_*ara 54 java string compare
问题很简单.JAVA中是否有任何函数可以比较两个字符串并返回true而忽略重音字符?
即
String x = "Joao";
String y = "João";
Run Code Online (Sandbox Code Playgroud)
回报是平等的.
谢谢
Dav*_*ton 65
我认为你应该使用Collator类.它允许您设置强度和区域设置,它将适当地比较字符.
从Java 1.6 API:
您可以设置Collator的强度属性,以确定在比较中被视为重要的差异级别.提供四种优势:PRIMARY,SECONDARY,TERTIARY和IDENTICAL.语言功能的优势的确切分配取决于语言环境.例如,在捷克语中,"e"和"f"被认为是主要差异,而"e"和"ě"是次要差异,"e"和"E"是三级差异,"e"和"e"是相同的.
我认为这里的重点(人们试图做的)是"Joao"和"João"永远不应该被认为是相等的,但是如果你在进行排序,你不希望它们根据它们的ASCII值进行比较因为那时你会有像Joao,John,João这样的东西,这并不好.使用collator类肯定会正确处理它.
Chr*_*ung 24
你没有从我这里听到这个(因为我不同意这个问题的前提),但是,你可以使用java.text.Normalizer
,并用NFD
以下标准化:这会从它附加的字母中分离出重音.然后,您可以过滤掉重音字符并进行比较.
如果将其配置为忽略变音符号,则Collator为a和á返回0:
public boolean isSame(String a, String b) {
Collator insenstiveStringComparator = Collator.getInstance();
insenstiveStringComparator.setStrength(Collator.PRIMARY);
return insenstiveStringComparator.compare(a, b) == 0;
}
Run Code Online (Sandbox Code Playgroud)
isSame("a","á")产生真实
小智 7
如果要比较/排序忽略重音符号,请使用apache StringUtils库中的stripAccents:
public int compareStripAccent(String a, String b) {
return StringUtils.stripAccents(a).compareTo(StringUtils.stripAccents(b));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22147 次 |
最近记录: |