2016-03-21 6 views
2

Я видел код ниже из java tutorial oracle. Чтобы подсчитать количество слов между doorbell (включительно) и pickle (включительно), автор добавил \0 после слова pickle. Я понимаю, что эффект добавления \0 после pickle состоит в том, что слово pickle теперь включено как часть подмножества. Но мой вопрос: зачем использовать \0? Может кто-нибудь, пожалуйста, помогите мне? Заранее благодарю за любую помощь!зачем использовать 0 для включения highEndPoint как часть подсписника

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

Edit:

Кроме того, что произойдет, если переменная dictionary является ссылкой на SortedSet? что мне теперь делать, если я хочу включить highEndPoint?

ответ

2

subSet(a, b) является включительно a но эксклюзивный из b. Поэтому, если вы хотите найти подмножество, включающее верхнюю границу pickle, вы должны использовать следующую возможную строку после pickle в качестве (исключительной) верхней границы.

Вы можете получить это, добавив нулевой символ \0 в конец строки.

В Java char является «действительно» просто целое число между 0 и 65535 и compareTo метод String сортирует символов этими значениями. Для того, чтобы увидеть, что \0 наименьшее возможное char значение, которое можно напечатать его значение, как это:

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

Спасибо за полезный комментарий! Однако мне было интересно, почему \ 0 выбрано для использования в этом контексте? что означает \ 0? какая другая функция служит? Не могли бы вы помочь мне? В очередной раз благодарим за помощь! –

+1

@ dzjustinli3 '' \ 0'' - это просто специальный символ, называемый нулевым символом. Это наименьший возможный символ с точки зрения сопоставления строк. –

0

Я считаю, что \0 является нулевой символ. Следующее слово в словаре ASCII из лексиграфической точки после слова pickle - pickle\0. JavaDoc для SortedSet.subset() имеет сказать следующее:

Возвращает представление части этого набора, элементы которого колеблются от fromElement, включительно, до toElement, эксклюзив.

Другими словами, если ваш фрагмент кода были следующие:

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

то слово pickle не будет появляться в подгруппе.

Лучше пример может быть, если вы хотите, чтобы получить все слова вида pickles, но ничего формы picklet (заканчивающийся в t), то вы должны использовать следующий код:

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

Here is a link в таблицу символов ASCII.