【问题标题】: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

【问题讨论】:

  • 字符串是不可变的,你必须从你想要保留的位中构建一个新的字符串,你不能只是删除你不想要的位(即,数组的 没有等价物拼接)。
  • 好点!我试图从标题中删除“破坏性”,但我做不到。

标签: javascript html


【解决方案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 而不是 substringKen White's answersubstrsubstring 之间的区别在于第二个参数,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2017-12-11
    • 1970-01-01
    • 2019-10-25
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多