为什么使用\ 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
“实际上”只是0
到65535
之间的整数, String
的compareTo
方法按这些值对String
排序。 要查看\0
是可能的最小char
值,您可以像这样打印其值:
System.out.println((int) '\0'); // Prints 0
我相信\0
是空字符。 在词典pickle
之后的词典点中的ASCII字典中的下一个单词是pickle\0
。 SortedSet.subset()
的JavaDoc具有以下内容:
返回此set的部分视图,其元素范围从fromElement(包括)到toElement(不包括)。
换句话说,如果您的代码段如下:
int count = dictionary.subSet("doorbell", "pickle").size();
那么pickle
这个词就不会出现在子集中。
一个更好的例子可能是如果你想获得表单pickles
所有单词,但没有formspicklet
(以t
结尾),那么你将使用以下代码:
int count = dictionary.subSet("doorbell", "picklet").size();
这是 ASCII字符表的链接 。