我有以下代码
public class test{
public static void main(String[] args){
String one = "x";
if(one.charAt(one.indexOf('x')+1)== 'p'){
System.out.println("test");
}
}
}
这会导致以下错误:
线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:1 at java.lang.String.charAt(String.java:658) 在test.main(test.java:4)
我希望这种情况发生,我的理解是它正在发生,因为String只有1个索引(0)因此无法在索引1处找到该字符
one.charAt(one.indexOf('x')+1)== 'p'
如果我的理解是正确的,我无法理解为什么这个其他程序没有同样的问题
class XClass{
boolean doubleX(String str){
boolean is = false;
int indexes = str.length()-1;
if(str.indexOf('x')== indexes){
is = false;
}else if(str.charAt(str.indexOf('x')+1)=='x'){//same code as the program above
is = true;
}
return is;
}
}
public class ImplementXClass{
public static void main(String[] args){
XClass Xmen = new XClass();
boolean result = Xmen.doubleX("x");
System.out.println(result);
}
}
即使方法参数是带有一个索引(“x”)的字符串,该程序也能成功编译。
答案 0 :(得分:1)
因为您的一个字符String传递了第一个if
条件,
int indexes = str.length()-1; // length is 1, 1-1 is 0.
if(str.indexOf('x')== indexes){ // str.indexOf('x') == 0
is = false; // <-- hits this.
您的else if
未被评估。
答案 1 :(得分:1)
str
为"x"
时,else if
甚至无法运行。
if
条件
if(str.indexOf('x') == indexes)
是true
,因为str.indexOf('x')
返回0
,而indexes
也是0
- str.length() - 1
。
因此,is
设置为false
,并且永远不会评估else if
条件。因此,不会发生IndexOutOfBoundsException
。
答案 2 :(得分:1)
//str = "x"
int indexes = str.length()-1; //indexes = 0;
if(str.indexOf('x')== indexes){ //evals to true, because the index of x is 0 in string "x"
is = false;
} else {
//... never executes because above evaluated to true