2012-10-06 53 views
4

晚上好无视希伯来语元音,我希望你能帮助我解决这个问题,因为我在努力寻找解决方案。比较字符串时

我有话,谁给我vowelled希伯来语单词的提供者,例如 -

Vowelled - בַּיִת不vowelled - בית

Vowelled - הַבַּיְתָה不vowelled - הביתה

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

我试图寻找到UTF-8如何处理希伯来语元音和它看起来像它只是普通字符。

我想呈现元音给用户,所以我要保持字符串,是在内存中,但我比较想忽略他们的时候。有没有简单的方法来解决这个问题?

+0

它可能有助于提供一点希伯来语元音的主题(许多读者将不熟悉主题)的额外背景。你可以保留一个你希望被认为是平等的角色对列表吗?如果是这样,这个问题简化为实现一个自定义字符串比较方法,这些方法将这些等效字符作为因素。 –

+0

我会创建一个从字符串中去除元音的函数,然后在比较字符串和String.equals之前使用这个函数。 (这可能可以用String.replace和所有希伯来语元音字符数组来完成) – Lalaland

+0

你发现哪些信息缺失?我不想再重新实现一个字符串的平等,我也不希望让所有的元音的映射,我宁愿从一些外部库...阅读 – user1708860

回答

5

您可以使用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 
+0

谢谢,它并没有解决我的问题,因为我不想在每个地方使用collat​​or,但很容易从这里继续。再次感谢:) – user1708860

0

AFAIK有ISN “T。 元音是字符。即使是字母和点的组合也是字符。请参阅维基百科页面。

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

可以存储搜索键你的话,因为只有在05dx-05ex范围内的字符。您可以为单词添加另一个字段与元音。

当然,你应该期待以下:

  • 你应该需要考虑有根据nikkud不同含义的词语。
  • 你应该考虑到י和ו的“mispellings”,这是家常便饭。
+0

好吧,谢谢你的回答,但@chooban已经给出了我需要的解决方案。至于你的两个用户故事,我知道第一个,但就第二个而言,这与英文中拼写错误一样,你是否熟悉拼写检查的简单解决方案? – user1708860