Java控制流

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++; }

我目前正在研究编码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
Character.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;
    }