Я нашел ответ. Спасибо за все идеи.
Одно из применений идиомы строки + "\0"
, особенно когда вы видите ее с операцией представления диапазона SortedSet
, заключается в использовании ее для поиска преемника строки.
Такой преемник необходим, потому что эти операции представления диапазона (subSet()
, headSet()
и tailSet()
) предоставляют полуоткрытые интервалы, и вам может понадобиться преемник строки для создания закрытого em> интервал. Это объясняется в Java Doc of Sorted Set а>
Несколько методов возвращают подмножества с ограниченными диапазонами. Такие диапазоны являются полуоткрытыми, то есть они включают свою нижнюю конечную точку, но не включают верхнюю конечную точку (где это применимо). Если вам нужен закрытый диапазон (который включает в себя обе конечные точки), а тип элемента позволяет вычислить преемника заданного значения, просто запросите поддиапазон от lowEndpoint до преемника (highEndpoint). Например, предположим, что s — отсортированный набор строк. Следующая идиома позволяет получить представление, содержащее все строки в s от младших до старших включительно:
SortedSet sub = s.subSet(low, high+"\0");
Другими словами, разница между двумя вызовами ниже:
countrySet.headSet("Japan\0");
countrySet.headSet("Japan")
заключается в том, что первый из них получит все строки в countrySet
в диапазоне от начала набора до включая строку "Japan"
(т. е. диапазон является замкнутым интервал); а второй получит все строки в диапазоне от начала набора до но не включая строку "Japan"
(т.е. диапазон представляет собой полуоткрытый интервал ).
Я включаю собственную тестовую программу, чтобы продемонстрировать использование идиомы:
import java.util.Arrays;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
public class StringPlusNull {
public static void main(String[] args) {
List<String> countryList
= Arrays.asList("U.S.", "U.K.", "China", "Japan", "Korea");
SortedSet<String> countrySet
= new TreeSet<>(countryList);
String toElement = "Japan";
SortedSet<String> countryHeadSet
= countrySet.headSet(toElement);
System.out.format("There are %d countries in the "
+ "(half-open) headset [, %s): %s%n"
, countryHeadSet.size(), toElement, countryHeadSet);
toElement = "Japan\0";
countryHeadSet
= countrySet.headSet(toElement);
System.out.format("There are %d countries in the "
+ "(half-open) headset [, %s): %s%n"
, countryHeadSet.size(), toElement, countryHeadSet);
}
}
Результат будет:
There are 1 countries in the (half-open) headset [, Japan): [China]
There are 2 countries in the (half-open) headset [, Japan ): [China, Japan]
person
leeyuiwah
schedule
29.01.2017
'\0'
символ равенnull
символу - person Mohsen_Fatemi   schedule 30.01.2017NUL
, как иchar
, известный как нулевой символ, но неnull
, который является ключевым словом Java и не применяется к примитивным типам. Я упоминаю об этом, потому что слова такие похожие, но значения такие разные. en.wikipedia.org/wiki/Null_character unicode-table.com/en docs.oracle.com/javase/specs/jls/se8/html/ - person Lew Bloch   schedule 30.01.2017