问题描述
从我代码的第5行开始,
if (i + 2 < str.length() && str.charat(i) == 'y' && str.charat(i + 2) == 'k')
语句的顺序重要吗?我想知道是因为
当我分配 str =“ yak123ya”
(i + 2 < str.length() && str.charat(i) == 'y' && str.charat(i + 2) == 'k')
可以正常工作
但是
(str.charat(i) == 'y' && str.charat(i + 2) == 'k' && i + 2 < str.length())
的原因
Stringindexoutofboundsexception:字符串索引超出范围:8(第5行)
public String stringYak(String str) {
String result = "";
for (int i = 0; i < str.length(); i++) {
if (i + 2 < str.length() && str.charat(i) == 'y' && str.charat(i + 2) == 'k') {
i += 2;
} else {
result += str.charat(i);
}
}
return result;
}
谢谢!
解决方法
表达式从左到右评估,并带有短路。这意味着当对表达式a && b
求值并且a
求值为false
时,整个表达式的求值为false
,而无需执行b
。
在这种情况下,当i = 6
时,i + 2 < str.length()
为false
,因此不会执行charAt(6)
(因此不会引发异常)。
是的,确定订单很重要。像这样的if语句
(i + 2