Java控制流程

时间:2015-07-15 08:51:16

标签: java if-statement logic

我目前正在编写关于codingbat的notReplace问题。我已经确定了错误的代码部分,但却不明白为什么。当notReplace("这是对的")被调用时,我得到输出:" Thtest test right"。 为什么代码的以下部分会运行?

    else if (!(Character.isLetter(i-1)) && i+2<len && !(Character.isLetter(i+2))){
newStr += "test";
i++;
}  

当i == 2时,charAt(i-1)==&#39; h&#39;所以第一个条件已经不满意,因为h是一个字母但是&#39;是&#39;仍然会被&#39; test&#39;取代。任何帮助赞赏。完整代码如下:

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

1 个答案:

答案 0 :(得分:0)

Character.isLetter(i - 1) 何时i =2  Character.isLetter(i-1) - &gt; Character.isLetter(1)

所以它是假的,因为1不是一封信。您的第一个条件!Character.isLetter(i - 1)是真的。您错过了charAt(i-1)部分

你应该使用

!Character.isLetter(charAt(i-1))