JavaScript - 编写字符串函数以替换字符的第 k 次出现


假设我们需要编写一个 String.prototype 函数,该函数接受三个参数。

  • 第一个参数是应搜索子字符串的字符串
  • 第二个参数是字符串,要移除其出现的字符串
  • 第三个参数是一个数字,例如 n,要从字符串中移除子字符串的第 n 次出现。

如果从字符串中成功移除 subStr,则该函数应返回新字符串,否则在所有情况下都应返回 -1。

示例

以下是代码 -

const str = 'jkdsttjkdsre';
const subStr = 'jk';
const num = 2;
removeStr = function(subStr, num){
   if(!this.includes(subStr)){
      return -1;
   }
   let start = 0, end = subStr.length;
   let occurences = 0;
   for(; ;end < this.length){
      if(this.substring(start, end) === subStr){
         occurences++;
      };
      if(occurences === num){
         return this.substring(0, start) + this.substring(end,this.length);
      };
      end++;
      start++;
   }
}
String.prototype.removeStr = removeStr;
console.log(str.removeStr(subStr, num));

此函数首先检查:如果 subStr 甚至没有出现一次,那么我们应该退出并返回 -1

然后它使用滑动窗口算法来记录字符串中 subStr 出现的次数(窗口大小等于 subStr 的长度)

最初,我们从最左边的窗口开始,然后我们继续滑动我们的窗口,直到窗口的末端到达原始字符串的末端。如果在我们的过程中,出现的次数等于所需的次数,我们从字符串中修剪该出现并返回由此获得的新字符串。

如果我们遍历整个字符串,则意味着字符串中没有足够的 subStr 出现,在这种情况下,我们应该返回 -1 并退出函数。

最后,我们将 removeStr 属性添加到 String.prototype,以便我们可以将其作为字符串函数调用。

输出

这将在控制台中产生以下输出 -

jkdsttdsre

更新于: 2020年9月18日

187 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告