为什么使用\ 0将highEndPoint包含在子列表中

我在java教程oracle中看到了下面的代码。 为了计算doorbell (包括)和pickle (包括)之间的单词数,作者在单词pickle之后添加了\0 。 我知道在pickle之后添加\0的效果是, pickle这个词现在作为子集的一部分包含在内。 但我的问题是,为什么要使用\0 ? 有人可以帮帮我吗? 在此先感谢您的帮助!

 SortedSet dictionary = new TreeSet(entire collection of words from a dictionary); int count = dictionary.subSet("doorbell", "pickle\0").size(); System.out.println(count); 

编辑:

另外,如果变量dictionary是对SortedSet的引用会发生什么? 如果我想包含highEndPoint,我现在该怎么办?

subSet(a, b)包含但包括b 。 因此,如果要查找包含上限pickle的子集,则必须在pickle之后使用下一个可能的字符串作为(独占)上限。

您可以通过将空字符\0添加到字符串的末尾来获得此结果。

在Java中, char “实际上”只是065535之间的整数, StringcompareTo方法按这些值对String排序。 要查看\0是可能的最小char值,您可以像这样打印其值:

  System.out.println((int) '\0'); // Prints 0 

我相信\0是空字符。 在词典pickle之后的词典点中的ASCII字典中的下一个单词是pickle\0SortedSet.subset()的JavaDoc具有以下内容:

返回此set的部分视图,其元素范围从fromElement(包括)到toElement(不包括)。

换句话说,如果您的代码段如下:

 int count = dictionary.subSet("doorbell", "pickle").size(); 

那么pickle这个词就不会出现在子集中。

一个更好的例子可能是如果你想获得表单pickles所有单词,但没有formspicklet (以t结尾),那么你将使用以下代码:

 int count = dictionary.subSet("doorbell", "picklet").size(); 

这是 ASCII字符表的链接 。