如何实现支持全人类语言的Java containsIgnoreCase方法?
多语言大小写不敏感字符串包含判断的问题
初始实现的局限
我最初写了一个简单的大小写不敏感包含判断方法:
public static boolean containsIgnoreCase(String a, String b) { if (a == null || b == null) { return false; } return a.toLowerCase().contains(b.toLowerCase()); }
但这个方法在处理ΙΧΘΥΣ和ιχθυσ这类希腊语字符串时会失效。
切换到Apache Commons Lang3后的问题
之后我改用了Apache Commons Lang3库中的StringUtils.containsIgnoreCase方法:
import org.apache.commons.lang3.StringUtils;
public static boolean containsIgnoreCase2(String a, String b) { if (a == null || b == null) { return false; } return StringUtils.containsIgnoreCase(a, b); }
这个方法能解决希腊语ΙΧΘΥΣ & ιχθυσ的问题,但在以下多语言特殊场景下仍然失效:
weiß与WEISS(德语变音字符转换)tschüß与TSCHÜSS(德语变音字符转换)ᾲ στο διάολο与Ὰͅ Στο Διάολο(希腊语带重音变体)flour and water与FLOUR AND WATER(连字字符展开)
疑问与求助
我有几个疑问,希望能得到帮助:
- 有没有办法实现支持所有语言场景的大小写不敏感字符串包含判断方法?
- Apache Commons Lang3是否有额外配置项可以解决上述失效场景?
- 我了解到icu4j库可以处理这类多语言国际化字符串问题,但没找到可用示例,已经引入了依赖:
<dependency> <groupId>com.ibm.icu</groupId> <artifactId>icu4j</artifactId> <version>72.1</version> </dependency>
内容的提问来源于stack exchange,提问作者BugsOverflow
相关产品推荐
相关产品推荐

