返回hi出现的次数

时间:2016-11-08 02:07:51

标签: java string

我正在做一些编码蝙蝠练习,而且我不太了解for-loop中的内容。

    public static int countHi(String str){
    int count = 0;

    // While i is less than the length of string increase the index by one
    // Checking the char at each index
    for(int i = 0; i < str.length()-1; i++){
        // Do i + 2 because hi has two letters
        // i = index 0 and add 2 so 0,1,2-- but 2 is exlcuded so check to see if index 0,1 equals "hi"
        if(str.substring(i, i+2).equals("hi")){
            count++;
        }
    }
    System.out.println("Hi appears: " + count + " times.");
    return count;
}

为什么str.length() - 1?如果我将其更改为str.Length我会收到错误:线程中出现异常&#34; main&#34; java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:5

3 个答案:

答案 0 :(得分:1)

想想这一部分:

str.substring(i, i+2)

i等于字符串的长度时,i + 2将超过字符串的结尾1,从而给出一个越界错误。

答案 1 :(得分:0)

这是因为你在str.substring(i,i + 2)中使用了i + 2,这导致了越界异常。

答案 2 :(得分:0)

当您使用str.length()时,它会为您提供字符串的长度,而可访问的字符串的最大索引由str.length() - 1给出。例如,"String"的长度为6.因此,当您尝试执行此操作str.substring(5 , (5+ 2))时,它将尝试访问超出边界的索引,因此会抛出异常。