Мне нужно найти подмножество имен в очень интернационализированном проекте (все возможные символы латинского алфавита), основываясь на начальном паттерне.
Например:
"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.)