ale*_*985 16 java string compare accent-insensitive
我想知道是否有一种方法比较2个字符串并忽略使"noção"等于"nocao"的重音.它会像string1.methodCompareIgnoreAccent(string2);
Ken*_*ira 34
你可以使用java Collators来比较忽略重音的测试,看一个简单的例子:
import java.text.Collator;
/**
* @author Kennedy
*/
public class SimpleTest
{
public static void main(String[] args)
{
String a = "nocao";
String b = "noção";
final Collator instance = Collator.getInstance();
// This strategy mean it'll ignore the accents
instance.setStrength(Collator.NO_DECOMPOSITION);
// Will print 0 because its EQUAL
System.out.println(instance.compare(a, b));
}
}
Run Code Online (Sandbox Code Playgroud)
文档:JavaDoc
我不会详细解释因为我只使用了一点Collators并且我不是它的专家,但你可以谷歌那里有一些关于它的文章.
小智 5
没有内置方法可以执行此操作,因此您必须构建自己的方法:
解决方案的一部分来自于此:首先将所有带重音符号的字符分解为无重音符号的字符,然后再组合变音符号。然后,您只需删除所有合并的变音符号即可。另请参阅/sf/answers/85058221/
然后,您的equals方法将如下所示:
import java.text.Normalizer;
import java.text.Normalizer.Form;
public boolean equals(Object o) {
// Code omitted
if (yourField.equals(removeAccents(anotherField))) {
return true;
}
}
public static String removeAccents(String text) {
return text == null ? null : Normalizer.normalize(text, Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14179 次 |
| 最近记录: |