【发布时间】:2012-06-04 10:31:08
【问题描述】:
这个问题是Java string searching ignoring accents的延续。
原始问题的答案向我们展示了如何从字符串中删除变音符号。因此,例如,köln 变为 koln。但是 łódź 变成了 łodz - 请注意 l with stroke。
我的问题是如何也删除笔画,使 łódź 变为 lodz?
谢谢。
【问题讨论】:
-
您得到了错误的答案。请参阅下面的评论。
这个问题是Java string searching ignoring accents的延续。
原始问题的答案向我们展示了如何从字符串中删除变音符号。因此,例如,köln 变为 koln。但是 łódź 变成了 łodz - 请注意 l with stroke。
我的问题是如何也删除笔画,使 łódź 变为 lodz?
谢谢。
【问题讨论】:
你不能,至少对于所有这些字母来说都不是微不足道的。字母 ł (除了外观和它的 Unicode 名称)根本没有链接到 l (至少在 Unicode 中;语言上是另一回事)。
您唯一的选择可能是您的用例的转换表,您可以填写您需要转换的所有字符。
【讨论】:
LATIN SMALL LETTER L WITH STROKE(即ł字符)的主要排序强度) 与普通的LATIN SMALL LETTER L 相同。正确的答案是使用 Unicode Collation Algorithm 比较字符串,但仅将强度设置为主要(一级)。如果你被 Java 卡住了,你可能不得不使用 ICU,因为 Sun 库没有正确实现 UCA。
ł 转换为l?« 我猜会很难使用排序算法(禁止枚举所有可能的字符串)。所以我主要看分解。不过,在不接受之前我不能删除。
正如 tchrist 所建议的,我尝试使用 ICU (V 50.1):它也不认为它是从 L 派生的。 带笔划的 L 似乎是 Unicode 中的一个特例。看http://bugs.mysql.com/bug.php?id=11369 他们说在 Unicode 4.0 中它没有连接到 L,而在 Unicode 4.1 中它是。我想知道是否有人用基于 Unicode4.1 的 Java 库测试过这个问题。
【讨论】: