For any given String
, for instance
val s = "abde"
how to insert a character c: Char
at position 2, after b
?
Update
Which Scala collection to consider for multiple efficient insertions and deletions at random positions ? (Assuming that a String
may be transformed into that collection.)
We can use the patch
method on String
s in order to insert a String
at a specific index:
"abde".patch(2, "c", 0)
// "abcde"
This:
drops 0
(third parameter) elements at index 2
inserts "c"
at index 2
which in other words means patching 0 elements at index 2 with the string "c"
.
Try this
val (fst, snd) = s.splitAt(2)
fst + 'c' + snd
Rope data structure proves a valid alternative to String
and StringBuffer
for heavy manipulation in (very) large strings, especially in regard to insertions and deletions.
Scalaz includes class Rope[A]
(see API and Rope.scala) and class WrappedRope[A]
(see API) with a plethora of operations on rope strings.
Implementations in Java include http://ahmadsoft.org/ropes/. A benchmarking study for this Java implementation may be found at http://www.ibm.com/developerworks/library/j-ropes/ .
A publication on ropes as an alternative to strings may be found at http://citeseer.ist.psu.edu/viewdoc/download?doi=10.1.1.14.9450&rep=rep1&type=pdf
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With