与字符串方法 .indexOf() Java 混淆的结果
Posted
技术标签:
【中文标题】与字符串方法 .indexOf() Java 混淆的结果【英文标题】:Confusing result with the string method .indexOf() Java 【发布时间】:2014-03-19 23:11:21 【问题描述】:我目前正在阅读 AP 计算机科学考试学习指南,但遇到了其中一个问题。
String s = "mathematics";
String vowels = "aeiou";
int number = 0;
for(int i = 0;i<s.length();i++)
number += s.indexOf(vowels.substring(0));
代码执行后number
的值是多少?我得出了 11 的结论,因为元音的第一个索引是“a”所以第一次出现在s
中的 a 是在索引 1。经过 11 次循环后会导致 11。但由于某种原因,正确答案是-11。我可以理解它是负数的,因为只要在字符串中找不到它就会返回 -1。但是我完全不知道为什么会在这种情况下发生。任何帮助表示赞赏!
【问题讨论】:
【参考方案1】:首先,认识到vowels.substring(0)
没有做任何事情。来自位置0
的子字符串等价于字符串本身。
字符串vowels
或"aeiou"
不会出现在"mathematics"
的任何位置,因此indexOf
将返回-1
11 次("mathematics"
是长度11
)。所以最后number
的结果就是-11
。
虽然不清楚你想要什么,但如果你想获得字符串s
中每个元音的位置,你必须重新编写你的for
循环并使用charAt(i)
或substring(i, i + 1)
.
【讨论】:
【参考方案2】:那是因为 substring(0) 返回完整的字符串。
你可以试试这个来理解:
System.out.println(vowels.substring(0));
vowels.substring(0)的结果是“aeiou”,而String s(“mathematics”)中不存在“aeiou”。
【讨论】:
以上是关于与字符串方法 .indexOf() Java 混淆的结果的主要内容,如果未能解决你的问题,请参考以下文章