2017-01-29 56 views
4

這個習語是什麼意思?與「\ 0」連接的java字符串(例如「Japan \ 0」)?如在爲什麼在查找SortedSet中的headSet時追加空字符「 0」?

SortedSet<String> countryHeadSet 
    = countrySet.headSet("Japan\0"); 

字符串"Japan\0"在調用中意味着什麼?如果程序員只寫

countryHeadSet 
    = countrySet.headSet("Japan"); 
+0

你看這個問題? http://stackoverflow.com/questions/9753576/whats-the-meaning-of-char-zero-0-in-java –

+0

''\ 0'' char'null' char –

+0

實際上,它是字符' NUL'作爲一個被稱爲「空字符」的char,但不是'null',它是一個Java關鍵字,不適用於原始類型。我把它提出來是因爲這些詞太相似了,但意義卻非常不同。 https://en.wikipedia.org/wiki/Null_character https://unicode-table.com/en/ https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html #jls-EscapeSequence –

回答

3

我找到了答案。感謝所有的想法。

一個使用字符串+ "\0"的成語,尤其是當你看到它 與SortedSet的範圍,視圖操作,是用它來查找字符串的 接班人。需要

這樣的後繼,因爲這些範圍視操作(subSet()headSet()tailSet())提供半開間隔,並且你 可能需要一個字符串的後繼構建關閉間隔。這在Java Doc of Sorted Set

中解釋了幾種方法返回具有受限範圍的子集。這些範圍是 半開,也就是說,它們包括它們的低端點,但不包括它們的高端點(如果適用)。如果您需要一個封閉範圍(其中 包含兩個端點),並且該元素類型允許計算給定值的後繼者 ,則僅請求從 lowEndpoint的子範圍到後繼者(highEndpoint)。例如,假設s是 的一組有序字符串。下面的習語獲得一個包含 所有字符串的視圖,從低到高(包括0,1,2)。

換句話說,下面的兩個電話之間的區別:

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] 
相關問題