【问题标题】:Search string by first letters using NavigableSet/SortedSet interfaces only仅使用 NavigableSet/SortedSet 接口按首字母搜索字符串
【发布时间】:2017-09-07 20:10:35
【问题描述】:

我有一个:

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。

【问题讨论】:

  • @whoever 投票支持结束,我相信这个问题包括期望的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。很清楚。

标签: java search tree set


【解决方案1】:

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

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()。如果字符串存在,则保证包含该字符串。从尾部集合中取出第一个字符串并检查它是否以您的三个字符开头。如果是,则您已找到满足您的搜索条件的字符串。如果尾集为空或第一个字符串不是以您的三个字符开头,则您的字符串不存在,无法找到。

【讨论】:

  • 1. "ab" + Character.MAX_VALUE + Character.MAX_VALUE 查询的解决方案是什么??
  • 2. tailSet("ab" + Character.MAX_VALUE, true) 返回ab+character.max_value 之后的每个元素。比如“纽约”、“加拿大”等等。
  • 3.如果我在树集中有Character.MAX_VALUE+"b" 元素怎么办。如何通过Character.MAX_VALUE查询找到它?
  • 1. treeSet.subSet("ab" + Character.MAX_VALUE + Character.MAX_VALUE, "ac")。 2. 这是真的。如果您想要所有以查询字符串开头的字符串,尾集不会执行所有必要的过滤。 3.tailSet("" + Character.MAX_VALUE).
  • 谢谢!你真的帮了我
猜你喜欢
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 2011-06-03
  • 2013-04-04
相关资源
最近更新 更多