Игнорирование еврейских гласных при сравнении строк
Добрый вечер, надеюсь, вы поможете мне с этой проблемой, так как я изо всех сил пытаюсь найти решение.
У меня есть поставщик слов, который дает мне гласные ивритские слова, например -
Гласный - בַּיִת не гласный - בית
Гласные - הַבַּיְתָה не гласные - הביתה
В отличие от моего провайдера, мой пользователь обычно не может вводить гласные на иврите (и я не должен этого делать). Пользовательская история - это пользователь, ищущий слово в предоставленных словах. Проблема заключается в сравнении слов с гласными и без гласных. Поскольку каждый из них представлен различным байтовым массивом в памяти, метод equals возвращает false.
Я попытался выяснить, как UTF-8 обрабатывает ивритские гласные, и кажется, что это просто нормальные символы.
Я хочу представить гласные пользователю, поэтому я хочу сохранить строку в памяти как есть, но при сравнении я хочу их игнорировать. Есть ли простой способ решить эту проблему?
2 ответа
Вы можете использовать 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
AFAIK там нет. Гласные это символы. Даже некоторые комбинации букв и точек являются символами. Смотрите страницу википедии.
http://en.wikipedia.org/wiki/Unicode_and_HTML_for_the_Hebrew_alphabet
Вы можете сохранить ключ поиска для своих слов в виде символов только в диапазоне 05dx-05ex. Вы можете добавить другое поле для слова с гласными.
Конечно, вы должны ожидать следующего:
- Вы должны учитывать слова, которые имеют различное значение в соответствии с никкудом.
- Вы должны принять во внимание "неправильное написание" слов י и ו, которые являются обычным явлением.