0

我需要根据起始模式在一个非常国际化的项目(所有可能的拉丁字符)中找到一个名称子集。例如:

"more, moreover", "morse"

with 模式more将返回前两个元素。到目前为止,我使用了TreeSet带有基本字符串排序的 a (即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,查询 subMap morf。如果是非 ascii 字符,这当然会失败。例如,如果搜索表达式以é, é+1is not结尾f。这两个问题是我需要将字符串与不同地区的不同字母进行比较,并且还要以某种方式确定字母表中的下一个字符。
除了编写我自己的代码表之外,还有什么方法可以用基本的 java (javase5) 做到这一点?(或者任何好的国际图书馆?我已经听说过 ICU。)

4

1 回答 1

2

用于此任务的最佳数据结构是后缀树。初始化后,此树将让您快速找到以给定字符序列开头的所有单词。这也是一段相对简单的编码。

于 2011-11-30T14:05:04.717 回答