1

直接来自这个java api

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

如果您需要一个封闭范围(包括两个端点),并且元素类型允许计算给定值的后继值,则只需请求从 lowEndpoint 到后继值(highEndpoint)的子范围。例如,假设 s 是一组已排序的字符串。下面的成语获得了一个视图,该视图包含 s 中从低到高的所有字符串,包括:

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

在此先感谢您的时间。

4

2 回答 2

2

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

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

例如,如果您正在处理 aSortedSet<Int>并且您想要 4 和 8 之间的子集,包括 4 和 8,您将使用s.subSet(4, 8+1). high+"\0"是等效的字符串。

于 2013-06-29T12:18:49.763 回答
1

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

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

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

于 2013-06-29T12:18:36.533 回答