2014-09-28 54 views
0

我已經writen像這樣的代碼:Java.lang.String.contains()方法與 「」 字符串

String name=""; 
    String path="hai"; 
    if(path.contains(name)) 
    { 
     System.out.println("its working"+name.length()); 
    } 

輸出: 其working0

我不明白爲什麼if條件滿足。請幫助

+1

這不是太大的問題。一個空字符串是字符串的一個子字符串(這裏)。我想你是問爲什麼,但答案是:因爲這是'包含'的工作原理。 (從一個集合的角度來看它是有意義的,空字符串是空集合)。 – keyser 2014-09-28 17:52:50

回答

0

您正在測試,如果路徑中包含空字符串,但因此測試總是通過每個字符串(甚至是空字符串)匹配這個條件。

+1

該帖子的標題說不然 – keyser 2014-09-28 17:50:37

+0

確實,我編輯了我的答案。 – Dici 2014-09-28 17:51:18

+0

Dici可以請你爲我修改的上述例子 – jack 2014-09-28 17:53:59

1

所有非null字符串包含空字符串""

在你的代碼中,if它執行的那一刻,是,其實:

if ("hai".contains("")) 

表達的if內產生true,滿足它。

關於輸出,再次,它是這樣的:

System.out.println("its working" + "".length()); 

因此打印its working0

0

的答案是正確的。空字符串「」是任何字符串的子字符串。就像空集是任何集的一個子集。

如果評估"name".substring(0,0)""。因此,「」是「名稱」的子字符串。

0

contains方法使用indexOf方法在內部。如果你會看在源代碼中更深層次的,那麼你會發現像

if (targetCount == 0) { 
    return fromIndex; 
} 

其中targetCount是目標字符串的(在你的情況下,空字符串)長度的片段,正如你可以看到,如果的長度目標字符串是0則該方法返回的fromIndex,其中有0。contains的價值迴歸真實的,因爲0 > -1,體內含有的方法是這樣的

indexOf(s.toString()) > -1