Java字符串搜索忽略重音符号 - 第二部分

3
这个问题是对 Java字符串搜索忽略重音 的延续。
原问题的答案向我们展示了如何从字符串中删除变音符号。例如,köln 变成了 koln。但是,łódź 变成了 lodz - 请注意带有划线L
我的问题是如何同时删除划线,以便 łódź 变成 lodz
谢谢。

你得到了错误的答案。请看下面我的评论。 - tchrist
2个回答

2
你不能简单地将所有这样的字母进行转换。其中的字母 ł(除了外观和它的 Unicode 名称)与 l 没有任何联系(至少在 Unicode 中是如此;在语言学上则另当别论)。你唯一的选择可能是创建一个转换表,将其中所有需要转换的字符填写进去以供你使用。

这个答案是不正确的!!根据 Unicode 排序算法所使用的当前 DUCET,U+0142 LATIN SMALL LETTER L WITH STROKE (即 ł 这个字符)的主排序强度与普通的 LATIN SMALL LETTER L 相同。正确的答案是使用仅设置为一级(primary level)的 Unicode 排序算法来比较字符串。如果你被 Java 绑定了,那么你可能需要使用 ICU,因为 Sun 库没有正确实现 UCA。 - tchrist
承认,我没有看清楚他们实际想要做什么,而是把这个问题看作是“如何创建一个新字符串,其中ł被转换为l?”我猜这可能会使用排序算法(除了枚举所有可能的字符串)。因此,我主要关注分解。不过,我不能删除直到未接受。 - Joey
我确实想要无重音的字符串。 - mark

1

正如tchrist所建议的那样,我尝试使用ICU(V 50.1):它没有将其识别为派生自L。 在Unicode中,带有斜杠的L似乎是一个特殊情况。看看http://bugs.mysql.com/bug.php?id=11369 他们说在Unicode 4.0中它与L没有连接,而在Unicode 4.1中它是连接的。我想知道是否有人用基于Unicode 4.1的Java库测试过这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接