仅使用NavigableSet / SortedSet接口按首字母搜索字符串

时间:2017-04-12 07:19:03

标签: java search tree set

我有一个:

String s = "ab" + Character.MAX_VALUE + Character.MAX_VALUE + Character.MAX_VALUE + "cd";

让我们把它放进TreeSet<String> treeSet。 现在我必须使用前3个字符"ab" + Character.MAX_VALUE找到此字符串。 方法treeSet.sublist("ab" + Character.MAX_VALUE, true, "ab" + Character.MAX_VALUE + Character.MAX_VALUE, true)对我不起作用。有没有办法使它工作?由于字符溢出,我无法将查询的最后一个字符更改为char + 1。

1 个答案:

答案 0 :(得分:0)

具体的答案很简单,你可能已经想到了这个:

treeSet.subSet("ab" + Character.MAX_VALUE, "ac")

(这与treeSet.subSet("ab" + Character.MAX_VALUE, true, "ac", false)相同)。

假设你收到一个变量中的三个字符(通常是String),说起来容易做起来难。如果您的字符串以Character.MAX_VALUE结尾,则需要删除所有尾随Character.MAX_VALUE,然后递增最后剩余的字符。然后还有一个特殊情况:如果您的字符串包含所有Character.MAX_VALUE,则需要使用tailSet()而不是subSet()。通过一些if语句和一个循环,它们都可以编程。快乐的编码。

更简单的选择:始终使用tailSet()。保证包含字符串(如果存在)。从尾部集中取出第一个字符串,并检查它是否以三个字符开头。如果是,则找到满足搜索条件的字符串。如果尾部集合为空或者第一个字符串不以您的三个字符开头,那么您的字符串就不存在,找不到。