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

2022-09-02 11:36:42

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

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

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

从逻辑上讲(至少对我来说)不会发生,但说它确实发生了,为什么?""blablablablaindexOf("")


答案 1

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

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

任何字符串中都存在一组空的 char 值,位于字符开头、结尾和字符之间。从任何东西中,你什么也抓不出来。从一根物理的绳子/纱线中,我可以说它内部存在一个零长度的部分。

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


答案 2

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