簡體   English   中英

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

[英]Check if string contains substring without using indexOf - Javascript

我的函數試圖在不使用 indexOf 或正則表達式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 )之間的索引相同applegate 但如果索引不相同(例如applegategate ),則applegate 如何正確操作迭代值,以便函數在兩種情況下都返回 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。 可以使用正則表達式.. 除非甚至這也被禁止..

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM