Добавить символ в строку, чтобы получить другую строку? - PullRequest
20 голосов
/ 10 ноября 2011

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

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

(cons \a "abc")

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

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

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


Редактировать: этобыл довольно тупой вопрос.: (

Ответы [ 2 ]

50 голосов
/ 10 ноября 2011

Как насчет:

(str "abc" \a)

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

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

2 голосов
/ 10 ноября 2011

Вы можете использовать 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's 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)))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...