【问题标题】:Java string searching ignoring accents - part II忽略重音符号的 Java 字符串搜索 - 第二部分
【发布时间】:2012-06-04 10:31:08
【问题描述】:

这个问题是Java string searching ignoring accents的延续。

原始问题的答案向我们展示了如何从字符串中删除变音符号。因此,例如,köln 变为 koln。但是 łódź 变成了 łodz - 请注意 l with stroke

我的问题是如何也删除笔画,使 łódź 变为 lodz

谢谢。

【问题讨论】:

  • 您得到了错误的答案。请参阅下面的评论。

标签: java unicode


【解决方案1】:

你不能,至少对于所有这些字母来说都不是微不足道的。字母 ł (除了外观和它的 Unicode 名称)根本没有链接到 l (至少在 Unicode 中;语言上是另一回事)。

您唯一的选择可能是您的用例的转换表,您可以填写您需要转换的所有字符。

【讨论】:

  • 这个答案不正确!!根据Unicode排序算法使用的当前DUCET,U+0142 LATIN SMALL LETTER L WITH STROKE(即ł字符)的主要排序强度) 与普通的LATIN SMALL LETTER L 相同。正确的答案是使用 Unicode Collat​​ion Algorithm 比较字符串,但仅将强度设置为主要(一级)。如果你被 Java 卡住了,你可能不得不使用 ICU,因为 Sun 库没有正确实现 UCA。
  • 承认,我没有看他们真正想要做什么,而是把这个问题当作 »如何创建一个新字符串,将ł 转换为l?« 我猜很难使用排序算法(禁止枚举所有可能的字符串)。所以我主要看分解。不过,在不接受之前我不能删除。
  • 我确实想要无重音的字符串。
【解决方案2】:

正如 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 库测试过这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2023-03-24
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多