我正在尝试解决编码蝙蝠的问题而无法通过一次测试。
给定一个字符串,计算以'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)
答案 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;
}