【问题标题】:Javascript - replacing a certain amount of characters in a string and leaving the restJavascript - 替换字符串中的一定数量的字符并保留其余字符
【发布时间】:2014-11-05 23:02:35
【问题描述】:

这是一个奇怪的问题。

基本上,我认为让用户键入一个字符串,将该字符串转换为 base64 并创建一个图像是一个很酷的主意。

虽然我没有学过base64,但我知道图像有标题数据,并且需要有一定的长度。我已经设法分离出告诉图像颜色的 base64 数据。现在,我有一个基本的白色图像 - you can check a js fiddle here -(不确定它是否在那里工作,但它在我的浏览器中工作)。

无论如何,变量“imgdata”是我的 PNG 图像的原始数据,这就是我想要更改的。不幸的是,该字符串似乎需要一定数量的字符,否则图像将无法正常工作(猜测它是标题中指定的大小?)

因为用户输入的字符串在转换为 base64 时不太可能总是达到相同数量的字符,所以我想知道如何替换字符串的第一部分,而不要理会其余部分。

TL;DR

我有这个字符串 -

aaa

我想替换这个字符串 -

123456

由于 string1 只有 3 个字符,我只希望它替换 string2 的前 3 个字符 所以结果看起来像

aaa456

记住 string1 的长度会有所不同。

【问题讨论】:

  • 查看.slice().length 的字符串,您应该会找到所需的所有答案。
  • 在 Javascript 中被视为数组的字符串类似于 Java,还是我需要做一些事情,例如创建一个新数组并将每个字符分配给一个新索引?
  • 没有。字符串不是 Javascript 中的数组。字符串有自己的一组方法,无需将它们放入数组来解决您的问题。也许您需要仔细阅读字符串上可用的方法here。使用.slice() 获取字符串的第一个或最后 N 个字符,然后将两个字符串重新加在一起,这就是解决问题所需的全部内容。
  • @AlexanderLozada 字符串在 Javascript 中是不可变的。

标签: javascript base64


【解决方案1】:

创建一个包含默认值的String

var fullLength = "abcdefg";

获取用户输入作为另一个字符串:

var user = "aaa";

创建第三个字符串,它是用户数据和默认值结尾的组合:

var combined = user + fullLength.substring(user.length);

由于 JavaScript 是一种弱类型语言,您需要确保使用的是 String 对象。您可以通过连接一个空字符串来做到这一点,这将确保所有字符串函数都可以工作:

var userString = userInput + "";

此外,还有三个非常相似的 String 函数,slice()substr()substring()。在 MDN 上做一些研究,看看哪个最适合你。

【讨论】:

  • 该死 - 我真的希望 OP 在看到字符串对象的文档并指出相关方法后能够自己解决这个相当微不足道的任务,但我想这不是 SO 的工作方式。
  • @jfriend00,我已经使用 Javascript 一年多了。这很简单,但实际上我以前从未遇到过这样的事情(至少在 Javascript 中)。或多或少,我不知道我需要的功能,而且这个话题很难研究。据我了解,您的方法包括将每个字符放入数组中,切掉我不需要的字符,然后添加。 Warren 的方法看起来更简单一些(至少据我所知)。
  • 公平地说,jfriend00 所描述的正是我所阐述的。他只是建议您使用slice() 而不是substring()(两个字符串函数)。在这种情况下,任何一个函数都会做同样的事情。
  • @AlexanderLozada - 我指出了.slice() 对象上的.slice() 方法。与数组无关。您显然没有查看我链接到您的页面。 .slice() 类似于 Warren 使用的 .substring(),只是参数略有不同。我只是希望你自己做一些研究来学习如何自己解决这个问题。仅供参考,关于 Javascript 中所有内置对象的一个​​很好的参考是 MDN。字符串方法都记录在here
  • 我很抱歉 - 当我研究你的答案时,我遇到了这个 page,虽然我仍然不认为反应是完全有根据的 :-) 在 python 中做这些事情这么多,我假设您在谈论数组操作。
【解决方案2】:

Javascript切片方法可以单独使用来解决问题。 slice 的第一个参数定义要抓取的第一个字符位置。第二个参数(停止位置)可以省略,这意味着您将获得字符串的其余部分。通过使用 a 的长度作为第一个参数意味着它将跳过与 a 的长度一样多的字符,然后用 b 的其余内容填充:

a + b.slice(a.length) // 'aaa456'

【讨论】:

  • 单独的代码块并不能提供好的答案。请添加解释(为什么它解决了问题,错误在哪里等等......)
  • 我同意。我添加了有关 slice 函数的更多详细信息,以及为什么它适合单独作为解决问题的最简单解决方案。
猜你喜欢
  • 2016-07-07
  • 2011-09-26
  • 2017-01-02
  • 1970-01-01
  • 2012-01-12
  • 2020-01-14
  • 2014-12-31
  • 1970-01-01
相关资源
最近更新 更多