2016-03-21 4 views
2

Ich sah den folgenden Code von Java-Tutorial Oracle. Um die Anzahl der Wörter zwischen (inklusive) und pickle (inklusive) zu zählen, fügte der Autor \0 nach dem Wort pickle hinzu. Ich verstehe, dass der Effekt des Hinzufügens \0 nach pickle ist, dass das Wort pickle jetzt als Teil der Teilmenge enthalten ist. Aber meine Frage ist, warum \0 verwenden? Könnte mir bitte jemand helfen? Vielen Dank im Voraus für jede Hilfe!Warum verwenden Sie 0, um HighEndPoint als Teil der Unterliste einzubeziehen

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:

Auch, was passiert, wenn die Variable dictionary ein Verweis auf SortedSet ist? Was soll ich jetzt tun, wenn ich den HighEndPoint einbinden möchte?

Antwort

2

subSet(a, b) ist inklusive a aber exklusiven von b. Wenn Sie also eine Untermenge mit der Obergrenze pickle finden möchten, müssen Sie die nächstmögliche Zeichenfolge nach pickle als (exklusive) Obergrenze verwenden.

Sie können dies erhalten, indem Sie das Nullzeichen \0 an das Ende der Zeichenfolge hinzufügen.

In Java, ein char ist „eigentlich“ nur eine ganze Zahl zwischen 0 und 65535 und der compareTo Methode des String Art Zeichen von diesen Werten. Um zu sehen, dass \0 ist die kleinstmögliche char Wert, den Sie seinen Wert wie folgt ausdrucken:

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

Vielen Dank für den hilfreichen Kommentar! Allerdings habe ich mich gefragt, warum \ 0 gewählt wird, um in diesem Zusammenhang verwendet zu werden? Was bedeutet \? Welche andere Funktion dient es? Könnten Sie mir bitte helfen? Danke nochmal für deine Hilfe! –

+1

@ dzjustinli3 ''\ 0'' ist nur ein Sonderzeichen, das Nullzeichen genannt wird. Es ist das kleinste mögliche Zeichen aus der Sicht der Art, wie Strings verglichen werden. –

0

Ich glaube \0 ist die Null-Zeichen. Das nächste Wort im ASCII-Wörterbuch von einem lexigrafischen Punkt nach dem Wort pickle ist pickle\0. Die JavaDoc für SortedSet.subset() hat folgendes zu sagen:

Gibt eine Ansicht des Teils dieses Satzes, dessen Elemente reichen von fromelement, inklusive, zu toElement, exklusiv.

Mit anderen Worten, die folgenden, wenn Ihr Code-Snippet war:

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

dann das Wort pickle im Subset nicht erscheinen würde.

Ein besseres Beispiel wäre, wenn Sie alle Worte des Formulars erhalten wollen pickles, aber nichts von der Form picklet (mit der Endung t), dann würden Sie den folgenden Code verwenden:

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

Here is a link zu die ASCII-Zeichentabelle.

Verwandte Themen