使用字符串方法.indexOf()Java混淆结果

时间:2014-03-19 23:11:22

标签: java substring indexof

我目前正在阅读一份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中出现的是索引1.在11个循环之后会导致11。但由于某种原因正确答案是-11。我可以理解它是否为负数,因为只要在字符串中找不到它就会返回-1。但我完全迷失了为什么会出现这种情况。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:2)

首先,要认识到vowels.substring(0)没有做任何事情。位置0的子字符串等同于字符串本身。

字符vowels"aeiou"未显示在"mathematics"的任何位置,因此indexOf将返回-1 11次("mathematics" }是长度11)。因此,最后number的结果为-11

虽然不清楚你想要什么,但如果你想获得字符串s中每个元音的位置,你将不得不重新编写for循环并使用charAt(i)substring(i, i + 1)

答案 1 :(得分:0)

那是因为substring(0)返回完整的字符串。

您可以尝试这样理解:

System.out.println(vowels.substring(0));

vowels.substring(0)的结果是“aeiou”,而字符串s(“数学”)中不存在“aeiou”。