js中克隆的substring()函数中的错误

时间:2014-11-22 17:03:56

标签: javascript string substring

我正在尝试在js中创建一个函数来检查主字符串中是否存在子字符串。例如: - main = 111010和substring = 011应返回false,因为主字符串中不存在子字符串,但我的代码返回true。这是下面的代码。

var string = "111010",
substr = "011";     

var found=false;

outter:for(var i=0;i<string.length;i++){
    if(string.charAt(i)==substr.charAt(0)){                   
        var k=i+1;
        inner:for(j=1;j<substr.length;j++){
            if(string.charAt(k++)==substr.charAt(j)){
                found=true;
                continue inner;
            }else{
              continue outter;
            }
        }
    }
}

if(found!=false){
    console.log("y")
}else{
    console.log("n");
}

2 个答案:

答案 0 :(得分:2)

您忘记重新初始化found变量。

var string = "111010",
substr = "0110";     

var found=false;

for(var i=0;i<string.length;i++){
    if(string.charAt(i)==substr.charAt(0)){                   
        var k=i+1;
        for(j=1; j < substr.length;j ++)
            if(string.charAt(k++)==substr.charAt(j)){
                found=true;
            }else{
               found = false; // <<--this
               break;
            }
        if(found) break;   
    }
}

if(found!=false){
    console.log("y")
}else{
    console.log("n");
}

如果您的代码在stringsubstring之间找到一个共同的字母,则代码始终返回true。

不要使用标签,它们简直太糟糕了。谢谢!

演示:http://jsfiddle.net/fer52ufd/

Here是您的代码实际应用的方式。

var found = false;

for (var i = 0; i < string.length; i++) { // starting position
    found = true; // All letters match,  prove the opposite

    for (j = 0; j < substr.length; j++) { // Compare the given string with the string starting at i
        if (string.charAt(i + j) != substr.charAt(j)) { // If one letter does not match, stop searching
            found = false;
            break;
        }       
    }

    if (found) break;
}
  • 为什么要单独处理第一个字母?
  • 不要使用标签
  • 不要搜索匹配项,搜索不匹配的字母,如果找不到,则字符串匹配。
  • 不要使用不必要的索引变量(如k),针脚上的字母位置为j,干草串中的位置为i+j

答案 1 :(得分:0)

这是检查以下内容的代码:

var string = "111010", substr = "011";
var test = string.indexOf(substr);

if (test >= 0) { 
    alert('yes');
} else {
    alert('no');
}