如何从字符串中的两个点破坏性地删除字符?

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。 substrsubstring 之间的区别在于第二个参数,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)一样使用startend,那么有这样一个函数:

String.prototype.removeAt = function(start, end) 
  return this.substr(0, start) + this.substr(end);


string.removeAt(7, 10); // Outputs: "I am a ing"

【讨论】:

感谢您的回复,我应该澄清一下,我还想从字符串中间删除字符。帖子已更新。 请注意substringsubstr 有细微的不同。第一个使用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

【讨论】:

以上是关于如何从字符串中的两个点破坏性地删除字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PHP 中的文本字符串中删除隐藏字符?

如何仅从字符串的开头删除点[重复]

如何从 Python 中的一组字符串中删除特定的子字符串?

如何识别/删除 R 中的非 UTF-8 字符

如何从R中的字符串列表中删除一个元素

如何从随机字符串中删除单词“ BALLOON”?