Java控制流
我目前正在研究编码BAT的notReplace问题。我已经识别出错误的代码部分,但不知道为什么。当调用notReplace(“This is right”)时,我得到输出:“Thtest test right”。 为什么下面的代码部分会运行Java控制流,java,if-statement,logic,Java,If Statement,Logic,我目前正在研究编码BAT的notReplace问题。我已经识别出错误的代码部分,但不知道为什么。当调用notReplace(“This is right”)时,我得到输出:“Thtest test right”。 为什么下面的代码部分会运行 else if (!(Character.isLetter(i-1)) && i+2<len && !(Character.isLetter(i+2))){ newStr += "test"; i++; }
else if (!(Character.isLetter(i-1)) && i+2<len && !(Character.isLetter(i+2))){
newStr += "test";
i++;
}
else if(!(Character.isLetter(i-1))和&i+2Character.isLetter(i-1)
当i=2时
Character.isLetter(i-1)
-->Character.isLetter(1)
所以它是假的,因为1
不是一个字母。你的第一个条件!Character.isleter(i-1)
是真的。你错过了charAt(i-1)
部分
你应该使用
!Character.isleter(charAt(i-1))
我不确定你问的是什么该死的,我真不敢相信我没有发现,非常感谢你的帮助。这正是我想知道的。
public String notReplace(String str) {
String newStr = "";
String iN = "is not";
int len = str.length();
for (int i=0; i<len; i++){
if (str.substring(i,Math.min(i+2,len)).equals("is")){
if (i==0 && i+2<len && !(Character.isLetter(i+2))){
newStr += iN;
i++;
}
else if (i+2==len && !(Character.isLetter(i-1))){
newStr += iN;
i++;
}
else if (!(Character.isLetter(i-1)) && i+2<len && !(Character.isLetter(i+2))){
newStr += "test";
i++;
}
else newStr += str.charAt(i);
}
else newStr += str.charAt(i);
}
return newStr;
}