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
广告