StringIndexOutOfBoundsException -1检查单词的最后一个字母

时间:2016-12-13 11:06:35

标签: java exception outofrangeexception

我正在尝试解决编码蝙蝠的问题而无法通过一次测试。

给定一个字符串,计算以'y'或'z'结尾的单词数 - 所以'heavy'中的'y'和'fez'中的'z'计数,但不是'y'中的'y' “黄色”(不区分大小写)。如果没有紧跟在它后面的字母,我们会说y或z位于单词的末尾。 (注意:Character.isLetter(char)测试char是否为字母。)

这是我的代码:

public int countYZ(String str) {
int count = 0;
str = str.toLowerCase();
String[] newArr = str.split("[\\s:0-9-!]+");
for (String word : newArr) {
  if (word.charAt(word.length() - 1) == 'y' || 
    word.charAt(word.length() - 1) == 'z') {
    count++;
    }
  }
    return count;
}

但是我无法通过此测试并显示此错误:

countYZ(“!! day - yaz !!”)→2

Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: -1 (line number:6)

1 个答案:

答案 0 :(得分:1)

Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: -1 (line number:6)表示您正在调用-1索引。

如果charAt(word.length()-1)word.length()-1 == -1,您的来电始终为word.length() == 0。在检查最后一个字母之前添加一个检查word.length()>0

这是由以下切片引起的:

!!day--yaz!!
["day", "yaz", ""]

例如,你可以写:

for (String word : newArr) {
  if (word.length() > 0 && (word.charAt(word.length() - 1) == 'y' || 
    word.charAt(word.length() - 1) == 'z')) {
    count++;
    }
  }
    return count;
}

或更简单(根据Ole的想法):

for (String word : newArr) {
  if (word.endsWith("y") || word.endsWith("z")) {
    count++;
    }
  }
    return count;
}