【问题标题】:ignoring hebrew vowels when comparing strings比较字符串时忽略希伯来语元音
【发布时间】:2012-10-06 20:17:30
【问题描述】:

晚上好,我希望你能帮我解决这个问题,因为我正在努力寻找解决方案。

我有一个单词提供者,他给我希伯来语元音单词,例如 -

元音 - בַּיִת 不元音 - בית

元音 - הַבַּיְתָה 不元音 - הביתה

与我的提供者不同,我的用户通常不能输入希伯来元音(我也不希望他这样做)。用户故事是用户在提供的单词中寻找单词。问题是元音词和非元音词之间的比较。由于每个都在内存中由不同的字节数组表示,所以equals方法返回false。

我尝试研究 UTF-8 如何处理希伯来元音,它似乎只是普通字符。

我确实想将元音呈现给用户,所以我想将字符串原样保留在内存中,但在比较时我想忽略它们。有什么简单的方法可以解决这个问题吗?

【问题讨论】:

  • 提供一些关于希伯来元音主题的额外背景可能会有所帮助(许多读者可能不熟悉该主题)。您可以维护一个您希望被视为平等的字符对列表是否合理?如果是这样,问题就简化为实现一个自定义字符串比较方法,该方法将这些等效字符考虑在内。
  • 我将创建一个从字符串中去除元音的函数,然后在将字符串与 String.equals 进行比较之前使用此函数。 (这可以用 String.replace 和所有希伯来元音的 char 数组来完成)
  • 您发现遗漏了哪些信息?我不想再次重新实现字符串的等号,也不想保留所有元音的映射,我宁愿从某个外部库中读取它...

标签: java encoding hebrew


【解决方案1】:

您可以使用Collator。我不能告诉你它是如何工作的,因为它对我来说是新的,但这似乎可以解决问题:

public static void main( String[] args ) {
    String withVowels = "בַּיִת";
    String withoutVowels = "בית";

    String withVowelsTwo = "הַבַּיְתָה";
    String withoutVowelsTwo = "הביתה";

    System.out.println( "These two strings are " + (withVowels.equals( withoutVowels ) ? "" : "not ") + "equal" );
    System.out.println( "The second two strings are " + (withVowelsTwo.equals( withoutVowelsTwo ) ? "" : "not ") + "equal" );

    Collator collator = Collator.getInstance( new Locale( "he" ) );
    collator.setStrength( Collator.PRIMARY );

    System.out.println( collator.equals( withVowels, withoutVowels ) );
    System.out.println( collator.equals( withVowelsTwo, withoutVowelsTwo ) );
}

由此,我得到以下输出:

These two strings are not equal
The second two strings are not equal
true
true

【讨论】:

  • 谢谢,它并没有解决我的问题,因为我不想在任何地方都使用整理器,但是从这里继续很容易。再次感谢:)
【解决方案2】:

AFAIK 没有。 元音是字符。甚至某些字母和点的组合也是字符。请参阅维基百科页面。

http://en.wikipedia.org/wiki/Unicode_and_HTML_for_the_Hebrew_alphabet

您只能将单词的搜索关键字存储为 05dx-05ex 范围内的字符。您可以为带有元音的单词添加另一个字段。

当然,您应该期待以下内容:

  • 您应该根据 nikkud 解释具有不同含义的单词。
  • 您应该考虑 י 和 ו 的“拼写错误”,这是司空见惯的。

【讨论】:

  • 嗯,谢谢你的回答,但@chooban 已经给出了我需要的解决方案。至于您的两个用户故事,我知道第一个,但至于第二个,这与英语单词的拼写完全一样,您是否熟悉一个简单的拼写检查解决方案?
猜你喜欢
  • 2012-01-12
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多