我目前正在编写关于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;
}
答案 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))