包含与归类器

2022-09-03 09:19:40

我必须测试一个字符串是否包含在另一个字符串中,但不考虑大小写或重音符号(在这种情况下是法语重音)。

例如,如果我在字符串中搜索,则该函数必须返回。true"rhone""Vallée du Rhône"

排序规则器对于字符串与重音符号的比较很有用,但不提供函数。contains

有没有一种简单的方法来完成工作?也许是正则表达式?

附加信息:
我只需要一个/返回值,我不关心引用字符串中测试字符串的匹配次数或位置。truefalse


答案 1

可以使用规范化程序将字符串减少到可以直接比较的精简版本。

编辑:要清楚

String normalized = Normalizer.normalize(text, Normalizer.Form.NFD);
String ascii = normalized.replaceAll("[^\\p{ASCII}]", "");

答案 2

看看 Normalizer

您应该将其称为第二个参数。Normalizer.Form.NFD

所以,这将是:

Normalizer.normalize(yourinput, Normalizer.Form.NFD)
    .replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
    .toLowerCase()
    .contains(yoursearchstring)

如果匹配,它将返回 true(当然,否则返回 false)