与字符串方法 .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 混淆的结果的主要内容,如果未能解决你的问题,请参考以下文章

Java逆向基础之ZKM字符串混淆与还原

Java字符串String类的indexOf()方法

C#零碎知识点笔记(容易混淆的一些点)2

Java 字符串常用操作(String类)

Java中字符串indexof() 的使用方法

Java中字符串indexof() 的使用方法