检查字符串是否包含子字符串而不使用indexOf - Javascript

Check if string contains substring without using indexOf - Javascript

本文关键字:字符串 indexOf Javascript 是否 包含 检查      更新时间:2023-09-26

我的函数正在尝试检查字符串是否包含子字符串而不使用indexOf或regex match或任何标准JS方法。

请查看此jsfiddle: https://jsfiddle.net/09x4Lpj2/

var string1 = 'applegate';
    var string2 = 'gate';
    function containsString(string1, string2){
	  var j = 0;
      var k = 0;
      var contains = 'false';
      var charArray1 = string1.split('');
      var charArray2 = string2.split('');
  
      for(var i = 0; i < charArray2.length; i++){
  	    j = i;
        if(charArray1[j++] != charArray2[k++]){
    	  contains = 'false';
        }else{
    	  contains = 'true';
        }   
      }
  
     console.log(contains);
    }
containsString(string1, string2);

此解决方案仅在两个字符串(例如applegateapple)之间的索引相同时才有效。但如果索引不相同(例如applegategate),则不起作用。我如何正确地操作迭代值,使函数在两种情况下都返回true ?

你可以试试这个修改过的脚本。

var string1 = 'applegate';
var string2 = 'gate';
var string3 = 'apple';
var string4 = 'leg';
var string5 = 'banana';
function containsString(string1, string2){
  var charArray1 = string1.split('');
  var charArray2 = string2.split('');
  var match = 0;
  // iterate from start of 1st string until length of 1st string minus length of 2nd string
  // you don't need to iterate the last part that is not longer than 2nd string since it will be false
  for(var i = 0; i < charArray1.length - charArray2.length + 1; i++){
    // reset match counter on every iteration
    match = 0;
    // iterate the 2nd string
    for(var j = 0; j < charArray2.length; j++){
      // compare corresponding char location
      if(charArray1[i+j] == charArray2[j]){
        match++;
        // just to check in console
        console.log(i, j, match, charArray1[i+j], charArray2[j]);
      } else {
        // just to check in console
        console.log(i, j, match, charArray1[i+j], charArray2[j]);
        // if not match, just skip current check
        break;
      }
      // if match already found, stop the checks, and return true
      if(match == charArray2.length){
        return true;
      }
    }
  }
  // match not found until end of iteration
  return false;
}
console.log(containsString(string1, string2));
console.log(containsString(string1, string3));
console.log(containsString(string1, string4));   
console.log(containsString(string1, string5));   // haystack does not contain needle
console.log(containsString(string4, string1));   // haystack is shorter than needle

欢迎来到SO。Regex可以使用…除非这也是被禁止的……

 function containsString(string1, string2){
    console.log(string1.match(string2) != null ? "Yes" : "No");
 }
正则表达式

这段代码有一个逻辑问题,只能判断a的最后一个字符是否等于B的对应字符,也许下面的代码就是你想要的,加一行代码。

var string1 = 'applegate';
var string2 = 'gate';
function containsString(string1, string2){
  var j = 0;
  var k = 0;
  var contains = 'false';
  var charArray1 = string1.split('');
  var charArray2 = string2.split('');
  for(var i = 0; i < charArray2.length; i++){
    j = i;
    if(charArray1[j++] != charArray2[k++]){
      contains = 'false';
      break;
    }else{
      contains = 'true';
    }   
  }
 console.log(contains);
}

在不使用任何内置函数的情况下检查

function subSearch(long,short){
var count = 0
for(i = 0;i < long.length; i++){
  for(j = 0;j < short.length; j++){
    if(short[j] != long[i + j]){
      break;
    }
    if((j+1) == short.length){
      count++;
    }
  }
}
return count;
}