2013-08-23 30 views
15

這是我用Java的String.indexOf()String.contains()方法發現的奇怪行爲。如果我有一個非空字符串說blablabla,我試圖尋找一個空字符串,它總是返回true,而我期望它返回false爲什麼contains()方法在Java中的非空字符串中找到空字符串

所以基本上,爲什麼下面的代碼返回true和0?

String testThis = ""; 
String fileName = "blablablabla"; 
System.out.println(fileName.contains(testThis)); 
System.out.println(fileName.indexOf(testThis)); 

邏輯上(至少對我來說)""不會發生blablablablaindexOf("")說是的話,爲什麼呢?

+0

你會如何證明在fileName的開頭沒有空字符串?您將不得不找到出現在空字符串中但不出現在fileName中的字符。 –

回答

24

每個字符串都會出現一個空字符串。具體來說,字符串的連續子集必須與空字符串匹配。任何空子集都是連續的,任何字符串都有一個空字符串作爲這樣一個子集。

當且僅當此字符串包含指定的char值序列時才返回true。

任何字符串中存在一組空字符值,位於字符的開始,結尾和字符之間。出於任何目的,你什麼都不能提取。從一根弦/紗線的物理片段我可以說它內部存在一個零長度的部分。

如果包含返回true,則可能調用substring(來獲取要查找的字符串。 "aaa".substring(1,1)應返回"",但請不要在此引用我,因爲我目前沒有IDE。 「

+2

深刻的哲學,但聽起來正確:)謝謝你。 –

+0

@george_h更像是在開始時無用的形式:D – hexafraction

5

」「出現在每個字符之間,也在開始和結束。