将“\ 0”添加到子集范围结束

时间:2013-06-29 12:12:22

标签: java set subset

直接来自java api

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

  

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

     

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

提前感谢您的时间。

2 个答案:

答案 0 :(得分:2)

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

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

例如,如果您正在处理SortedSet<Int>并且您想要4到8之间的子集(包括两者),那么您将使用s.subSet(4, 8+1)high+"\0"是String等价物。

答案 1 :(得分:1)

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

如果你想要它包含在内,你需要给出一个稍高的限制,但不要高到足以包含另一个元素

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