Найдите подмножество лексикографически упорядоченных строк с символами Юникода, начинающимися с того же шаблона - PullRequest
0 голосов
/ 30 ноября 2011

Мне нужно найти подмножество имен в очень интернационализированном проекте (все возможные символы латинского алфавита), основываясь на начальном паттерне. Например:

"more, moreover", "morse"

с шаблоном more вернет первые два элемента. До сих пор я использовал TreeSet с базовым порядком строк (т. Е. С String -s compareTo), и я сопоставлял шаблон с этим кодом:

        String end = start.substring(0, start.length()-1) + (char)(start.charAt(start.length()-1) + 1);
        SortedMap<String, Long> matching= empIndexByName.subMap(start, end);

Словами: я заменяю последнюю букву следующей на значение int и запрашиваю вложенную карту с помощью more, morf. Что, конечно, не работает в случае символов, отличных от ascii. Например, если поисковое выражение заканчивается на é, é+1 не равно f. Две проблемы в том, что мне нужно сравнить строки с разными алфавитами в разных регионах, а также как-то определить следующий символ в алфавите.
Есть ли способ сделать это с базовой Java (javase5), кроме написания собственных таблиц кода? (Или какие-нибудь хорошие библиотеки intl. Я уже слышал об ICU.)

1 Ответ

2 голосов
/ 30 ноября 2011

Лучшая структура данных для этой задачи - дерево суффиксов . После инициализации это дерево позволит вам быстро найти все слова, начиная с заданной последовательности символов. Это тоже относительно простая часть кода.

...