Добавить символ в строку, чтобы получить другую строку?

Я хочу добавить символ в строку и получить другую строку с добавленным символом в результате.

Это не работает:

(cons \a "abc")

Возможные решения в порядке предпочтения:

  • Clojure Основная функция
  • Clojure функция библиотеки
  • Clojure пользовательская (me!) функция (например, (apply str (cons \a "abc")))
  • java.lang.String методы

Есть ли какое-либо решение категории 1 до того, как я откажусь от своего имени?


Изменить: это был довольно глупый вопрос. : (

Ответы

Ответ 1

Как насчет:

(str "abc" \a)

Это возвращает "abca" на моей машине.

Вы также можете использовать его для любого количества строк/символов: (str "kl" \m "abc" \a \b).

Ответ 2

Вы можете использовать join от clojure.string:

(clojure.string/join [\a "abc"])

Но для простого использования вы должны просто использовать str, как предлагает @Dan Filimon. join имеет дополнительное преимущество, что вы можете поместить разделитель между объединенными строками, но без разделителя он фактически просто применяет str:

(defn ^String join
  "Returns a string of all elements in coll, separated by
   an optional separator.  Like Perl join."
  {:added "1.2"}
  ([coll]
     (apply str coll))
  ([separator [x & more]]
     (loop [sb (StringBuilder. (str x))
            more more
            sep (str separator)]
       (if more
         (recur (-> sb (.append sep) (.append (str (first more))))
                (next more)
                sep)
         (str sb)))))