Java String.indexOf and empty Strings
我很好奇为什么String.indexOf在查询字符串中的空字符串的索引时返回0(而不是-1)。
Javadocs仅说此方法返回指定字符串在此字符串中的索引,如果找不到该字符串,则返回-1。
在我看来,这种行为是非常出乎意料的,我期望值为-1。 有什么想法为什么这种意外的行为会继续吗? 我至少认为这值得在该方法的Javadocs中进行说明...
1 2 3 4
| System. out. println("FOO". indexOf("")); // outputs 0 wtf!!!
System. out. println("FOO". indexOf("bar")); // outputs -1 as expected
System. out. println("FOO". indexOf("F")); // outputs 0 as expected
System. out. println("". indexOf("")); // outputs 0 as expected, I think |
-
是的,这是什么问题?
-
"foo".indexOf("")返回0,"foo".substring(0.0)返回""。 ID说,似乎是一致的。
-
stackoverflow.com/questions/2568625/的可能重复项
-
System.out.println("。indexOf(" FOO"))); <-这确实返回-1,我认为您可能混淆了预期的结果?
-
对于某些令人难以置信的事情,"".contains("")是true。因此,空字符串包含某些内容……而它却是空的!!!
-
@polygenelubricants:对于所有字符串,a.contains(a)再次为true。
-
@Adam Paynter-是的,看来我确实重新提出过。我的搜索省略了C#。 @ProfessionalAmateur-我的原始测试与您的测试相反。 @polygenelubricants-大声笑我的心! :P
-
@Adam(再次)-实际上,非常感谢您指出该C#链接。值得注意的是,C#文档明确声明空字符串返回0。在C#情况下,由于记录了文档,因此这是预期的行为。
-
@Joachim:是的,但不是isEmpty()。那就是我试图对比的,s1.isEmpty() && s1.contains(s2)可以是true。
空字符串无处不在,无处不在。它始终存在于所有字符串中,渗透着它们的本质,但是当您寻求它时,您将永远不会瞥见。
一个字符串的开头可以容纳多少个空字符串?亩
学生对老师说:
Teacher, I believe that I have found the nature of the empty string. The empty string is like a particle of dust, and it floats freely through a string as dust floats freely through the room, glistening in a beam of sunlight.
老师回应学生,
Hmm. A fine notion. Now tell me, where is the dust, and where is the sunlight?
老师用皮带打学生,并指示他继续冥想。
-
因此,我们非常需要更多像您这样的用户。我在相关的帖子中读了您的一个答案,并且一直在努力从您个人资料中的其他答案中筛选出最后一千万个答案。做得好,禅师。
-
但是,如何计算在空弦中可以跳舞的天使的数量呢?
-
我喜欢这个。永远不会忘记这样的答案。
好吧,如果有帮助,您可以将"FOO"视为"" +"FOO"。
-
实际上,可以在字符串中的任意两个相邻字符之间以及在开头和结尾处找到空字符串。第一个这样的实例是字符串的开头,即位置0。
-
我会说空字符串在字符串Ali G中出现0次,但显然Im是错误的。
-
@Ali G:4个不同的时间:在位置0、1、2和3处,您可以通过调用.substring(0,0)直至"FOO"上的.substring(3,3)轻松地进行验证。
-
StringTokenizer st = new StringTokenizer(" FOO","); System.out.println(st.countTokens()); //输出1因此,根据StringTokenizer看来空字符串存在一次
-
@ Johannes,@ tmeisenh,@ Joachim:很好的答案,绝对同意;-)
-
@Joachim:但是,您可以在字符串的任何位置将空字符串连接任意次,仍然可以获得所需的结果。
-
和公认的答案一样有趣。我认为这对于像我这样的新手来说更加简洁明了。
int number_of_empty_strings_in_string_named_text = text.length() + 1
所有字符都用空的String分隔。另外,在开头和结尾都存在空String。
-
现在,我看到在Joeys的评论中有相同的描述,但是我仍然认为将其放入新的答案中是一个好主意,因为那是唯一可以真正解释其工作原理的答案。 @Joey如果您想将这个答案作为自己的答案并删除我的,请告诉我,因为您是第一个这样做的人。
使用代数方法,"是字符串连接的中性元素:x +" == x和" + x == x(尽管+在这里是不可交换的)。
那么它还必须是:
1 2
| x.indexOf ( y ) == i and i != -1
<==> x.substring ( 0, i ) + y + x.substring ( i + y.length () ) == x |
当y ="时,如果i == 0且x.substring(0,0)==",则成立。
我没有设计Java,但是我猜数学家参加了它。
通过使用表达式",您实际上是在指一个空字符串。空字符串是放置在存在的东西上的空灵标记,仅表明该位置没有任何东西。
因此,通过说" .indexOf("),您实际上是在询问解释器:
null字符串中的null值哪里存在?
它返回零,因为null在不存在的null字符串的开头。
现在,向字符串添加任何内容将使其成为非null字符串... null可以被视为缺少所有内容,甚至没有任何内容。
-
那么"空字符串"和null有什么区别?我们不是专门说"空字符串"而不是"空字符串"以避免与null混淆吗?
-
查看以下说明:stackoverflow.com/questions/4802015/