Вставить символ в строку Scala

Для любого данного String, например

val s = "abde"

как вставить символ c: Char в положении 2, после b?

Обновить

Какую коллекцию Scala следует учитывать для нескольких эффективных вставок и удалений в случайных позициях? (Предполагая, что String может быть преобразован в эту коллекцию.)

2 ответа

Решение

Структура данных веревки доказывает правильную альтернативу String а также StringBuffer для тяжелых манипуляций в (очень) больших строках, особенно в отношении вставок и удалений.

Скалаз включает в себя class Rope[A] (см. API и Rope.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

Мы можем использовать patch метод на String s для того, чтобы вставить String по определенному индексу:

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

Это:

  • капли 0 (третий параметр) элементы в индексе 2

  • вставки "c" по указателю 2

что другими словами означает patching 0 elements at index 2 with the string "c",

Попробуй это

val (fst, snd) = s.splitAt(2)
fst + 'c' + snd
Другие вопросы по тегам