【问题标题】:Insert character in Scala String在 Scala 字符串中插入字符
【发布时间】:2014-10-03 22:42:07
【问题描述】:

例如对于任何给定的String

val s = "abde"

如何在b之后的位置2插入一个字符c: Char

更新

在随机位置进行多次有效插入和删除时要考虑哪个 Scala 集合? (假设 String 可以转换为该集合。)

【问题讨论】:

  • 得到子串[0,2)[2,length),然后做sub1 + c + sub2
  • String sub1 = s.substring(0,2) 给你“ab”
  • 不要忘记字符串是不可变的
  • @enzyme 一般来说,如果你经常这样做并且字符串很长,rope 是正确的数据结构。 IIRC,Scala 在标准库中没有这样的东西。
  • @om-nom-nom 谢谢!看起来像要走的路...寻找 Scala 绳索实现...

标签: string scala scala-collections scalaz ropes


【解决方案1】:

我们可以在Strings 上使用patch 方法,以便在特定索引处插入String

"abde".patch(2, "c", 0)
// "abcde"

这个:

  • 在索引2 处删除0(第三个参数)元素

  • 在索引2处插入"c"

换句话说就是patching 0 elements at index 2 with the string "c"

【讨论】:

    【解决方案2】:

    试试这个

    val (fst, snd) = s.splitAt(2)
    fst + 'c' + snd
    

    【讨论】:

    • 不确定Vectors 是否适合您的要求。检查here中的性能特征
    【解决方案3】:

    Rope data structure 被证明是 StringStringBuffer 的有效替代方案,用于在(非常)大的字符串中进行大量操作,尤其是在插入和删除方面。

    Scalaz 包括 class Rope[A](参见 APIRope.scala)和 class WrappedRope[A](参见 API),对绳索进行了大量操作。

    Java 中的实现包括http://ahmadsoft.org/ropes/。此 Java 实现的基准测试研究可在 http://www.ibm.com/developerworks/library/j-ropes/ 找到。

    可以在http://citeseer.ist.psu.edu/viewdoc/download?doi=10.1.1.14.9450&rep=rep1&type=pdf 找到关于绳索作为字符串替代品的出版物

    【讨论】:

      猜你喜欢
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多