直接来自java api:
为什么添加“\ 0”会“打开”一个范围结束,如下面的引言所述? 我检查了“\ 0”转义序列,它表示它代表空字符。 字符串中的空字符是什么?为什么添加到子集的“高参数”应该给出参数本身包含在范围内?
如果您需要一个封闭范围(包括两个端点)和 元素类型允许计算给定值的后继, 只需要从lowEndpoint请求子范围 继任者(highEndpoint)。例如,假设s是有序集 字符串。以下习语获得包含所有内容的视图 s中的字符串从低到高,包括:
SortedSet sub = s.subSet(low,high +“\ 0”);
提前感谢您的时间。
答案 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
,因为使它更长会使它在上限之后排序(因此包含了上限元素),但它不可能找到另一个在它们之间排序的字符串,因此不存在无意中包含额外元素的风险。