19

String.indexOf()这是我在 Java和String.contains()方法中发现的一种奇怪行为。如果我有一个非空字符串,blablabla并且我尝试在其中查找一个空字符串,它总是返回true,而我希望它返回false

所以基本上,为什么下面的代码返回 true 和 0 ?

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

逻辑上(至少对我而言)""不会发生blablablablaindexOf("")说会发生,为什么?

4

2 回答 2

39

每个字符串中都会出现一个空字符串。具体来说,字符串的连续子集必须与空字符串匹配。任何空子集都是连续的,并且任何字符串都有一个空字符串作为这样的子集。

当且仅当此字符串包含指定的 char 值序列时才返回 true。

任何字符串中的开头、结尾和字符之间都存在一组空的 char 值。从任何事物中,您都无法提取任何东西。从一根物理的字符串/纱线中,我可以说其中存在一个零长度部分。

如果 contains 返回 true,则可能substring(调用来获取要查找的字符串。"aaa".substring(1,1)应该返回"",但不要引用我的话,因为我目前没有 IDE。

于 2013-08-23T09:19:40.333 回答
10

""发生在每个字符之间,也发生在开始和结束处。

于 2013-08-23T09:20:07.003 回答