在 C# 中,在大多数情况下似乎Grüsse
和Grüße
被认为是平等的,正如这个漂亮的网页所解释的那样。我试图在 Java 中找到类似的行为 - 显然不是在java.lang.String
.
我以为我很幸运java.regex.Pattern
与Pattern.UNICODE_CASE
. Javadoc 说:
UNICODE_CASE 启用 Unicode 感知大小写折叠。如果指定了此标志,那么在由 CASE_INSENSITIVE 标志启用时,不区分大小写的匹配将以符合 Unicode 标准的方式进行。
然而下面的代码:
Pattern p = Pattern.compile(Pattern.quote("Grüsse"),
Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
System.out.println(p.matcher("Grüße").matches());
产量false
。为什么?是否有另一种重现 C# 案例折叠行为的方法?
- - 编辑 - -
正如@VGR 指出的那样,String.toUpperCase
将转换ß
为ss
,这可能是也可能不是大小写折叠(也许我在这里混淆了概念)。但是,德语语言环境中的其他字符不会“折叠”,例如ü
不会变成UE
. 因此,为了使我的初始示例更加完整,有没有办法在 Java中使Grüße
和比较相等?Gruesse
我在想这个java.text.Normalizer
类可以用来做到这一点,但它转换ü
为u?
而不是ue
. 它也没有提供 a 的选项Locale
,这让我更加困惑。