2012-10-06 95 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