Игнорирование еврейских гласных при сравнении строк

Добрый вечер, надеюсь, вы поможете мне с этой проблемой, так как я изо всех сил пытаюсь найти решение.

У меня есть поставщик слов, который дает мне гласные ивритские слова, например -

Гласный - בַּיִת не гласный - בית

Гласные - הַבַּיְתָה не гласные - הביתה

В отличие от моего провайдера, мой пользователь обычно не может вводить гласные на иврите (и я не должен этого делать). Пользовательская история - это пользователь, ищущий слово в предоставленных словах. Проблема заключается в сравнении слов с гласными и без гласных. Поскольку каждый из них представлен различным байтовым массивом в памяти, метод 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. Вы можете добавить другое поле для слова с гласными.

Конечно, вы должны ожидать следующего:

  • Вы должны учитывать слова, которые имеют различное значение в соответствии с никкудом.
  • Вы должны принять во внимание "неправильное написание" слов י и ו, которые являются обычным явлением.
Другие вопросы по тегам