【问题标题】:Adding "\0" to a subset range end将“\0”添加到子集范围结束
【发布时间】:2013-06-29 12:12:22
【问题描述】:

直接来自这个java api

为什么添加“\0”会“打开”一个范围结尾,如以下引用中所述? 我检查了“\0”转义序列,它说它代表空字符。 就字符串而言,空字符是什么?为什么添加到子集的“高参数”应该使参数本身包含在范围内?

如果您需要一个封闭范围(包括两个端点),并且 元素类型允许计算给定值的后继值, 只需请求从 lowEndpoint 到的子范围 继任者(高端点)。例如,假设 s 是一个有序集 的字符串。以下成语获取包含所有 s中的字符串从低到高,包括:

SortedSet sub = s.subSet(low, high+"\0");

提前感谢您的宝贵时间。

【问题讨论】:

  • 简而言之:为什么 s.subSet(low, high+"\0");应该包括范围内的高指数?添加“\0”意味着什么?谢谢

标签: java set subset


【解决方案1】:

high+"\0" 是一种获取将在high 之后立即排序的字符串的方法。

因此,如果您想要包含high 元素的子集,则需要将子集的限制指定为high+"\0"

例如,如果您正在处理SortedSet<Int>,并且想要介于 4 和 8 之间的子集(包括两个端点),则可以使用 s.subSet(4, 8+1)high+"\0" 是等效的字符串。

【讨论】:

    【解决方案2】:

    当您调用具有上限和下限的子集时,将不包含 上限元素(即将包含low <= element < high,但不包括high)。

    如果你想包含它,你需要给一个限制略高,但不足以包含另一个元素

    制作下一个更大的字符串的最简单方法是附加一个\0,因为让它更长会使其在上限之后排序(因此包括上限元素),但不可能找到另一个在它们之间排序的字符串,因此不会有无意中包含额外元素的风险。

    【讨论】:

      猜你喜欢
      • 2010-12-01
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      相关资源
      最近更新 更多