为什么contains()方法在Java中的非空字符串中找到空字符串

时间:2013-08-23 09:18:26

标签: java string

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

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

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

逻辑上(至少对我而言)"" blablablabla中没有indexOf(""),{{1}}表示确实如此?

2 个答案:

答案 0 :(得分:30)

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

  

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

任何字符串,开头,结尾和字符之间都存在一组空的char值。出于任何事情,你什么都不提取。从物理的一条绳子/纱线我可以说它内部存在零长度部分。

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

答案 1 :(得分:6)

""发生在每个角色之间以及开始和结束时。