2014-09-28 139 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