如何从字符串中的两个点破坏性地删除字符?
Posted
技术标签:
【中文标题】如何从字符串中的两个点破坏性地删除字符?【英文标题】:How to destructively remove characters from two points in a string? 【发布时间】:2017-04-04 07:26:23 【问题描述】:我想从字符串中的两个点破坏性地删除字符,因此在删除后调用字符串时,它不会包含已删除的字符。
示例
var string = "我是一个字符串";
我想:删除 (0, 7);
当我再次调用字符串时,它应该返回:
console.log(string) => 字符串
示例 2
var string = "我是一个字符串";
我想:删除 (7, 10);
当我再次调用字符串时,它应该返回:
console.log(string) => 我是 ing
【问题讨论】:
字符串是不可变的,你必须从你想要保留的位中构建一个新的字符串,你不能只是删除你不想要的位(即,数组的 没有等价物拼接)。 好点!我试图从标题中删除“破坏性”,但我做不到。 【参考方案1】:见javascript substring。
在你的例子中使用这个:
var string = "I am a string";
console.log(string.substring(7));
输出
string
更新
要删除字符串的一部分,您可以将第一个想要的字符与最后一个想要的字符连接起来,如下所示:
var string = "I am a string";
console.log(string.substr(0, 5) + string.substr(7));
输出
I am string
如果您想使用直接函数来删除部分字符串,请参阅使用 substr
而不是 substring
的 Ken White's answer。 substr
和 substring
之间的区别在于第二个参数,substring
是要停止的索引,substr
是要返回的长度。你可以使用这样的东西:
String.prototype.replaceAt = function(index, charcount)
return this.substr(0, index) + this.substr(index + charcount);
string.replaceAt(5, 2); // Outputs: "I am string"
或者如果你想像(7, 10)
一样使用start
和end
,那么有这样一个函数:
String.prototype.removeAt = function(start, end)
return this.substr(0, start) + this.substr(end);
string.removeAt(7, 10); // Outputs: "I am a ing"
【讨论】:
感谢您的回复,我应该澄清一下,我还想从字符串中间删除字符。帖子已更新。 请注意substring 和substr 有细微的不同。第一个使用start、end参数,第二个使用start、length。 太棒了!正是我正在寻找的东西,我很惊讶没有一种方法可以做到这一点。 只有一个问题,正如 RobG 在评论中指出的那样...console.log(string),在“删除”之后,返回原始变量。 @RobG 是的,我知道。我得到了String.prototype.replaceAt
,与肯怀特的回答完全一样。我认为这样的功能效果很好,但我想在这里使用substring
会更好,因为我们必须处理字符串索引而不是长度。【参考方案2】:
最简单的方法是将前半部分和后半部分切开,然后将它们重新拼接在一起:
var string = "I am a string";
string = string.substring(0, 7) + string.substring(10);
console.log(string);
// => I am a ing
【讨论】:
以上是关于如何从字符串中的两个点破坏性地删除字符?的主要内容,如果未能解决你的问题,请参考以下文章