How to build strings in Clojure

string join clojure
clojure map
clojurescript string concatenation
clojure string split
clojure string format
clojure string replace
clojure partition string
clojure string length

Say i have a list of elements like [1 2 3] and i wanted to transform it into |1|2|3|. Or if i wanted to repeat the sequence "---" 3 times into "---------".

How should i approach it so that i can build it up into a string like that. Is there a method similar to Java's StringBuilder? Im not looking for a concrete answer to this question but just general guidance as to how to build strings in Clojure as im very new to the language.

The answer to use (apply str ...) is usually the best one. But here is an additional technique, and a "pro tip" about the three dots in (apply str ...).

If the string's content would most naturally be generated by the print functions (which is not the case with your specific examples!), then you can capture it with with-out-str:

(with-out-str
  (doseq [i (range 1 4)]
    (print "|")
    (print i))
  (println "|"))   ;; => "|1|2|3|\n"

Usually, (apply str ...) is more idiomatic. You can use the whole rich tapestry of sequence functions (interleave, interpose, repeat, cycle, ...) and extract the result as a string with (apply str ...). But you face a challenge if the sequence contains nested sequences. We mention this challenge here because there are two solutions that are specific to building up strings.

To be clear, nested sequences "work fine" in every respect except that what str does to a sequence might not be what you want. For example, to build "1------2------3":

;; not quite right:
(apply str 
       (interpose 
         (repeat 2 "---") 
         (range 1 4))) ;; => "1(\"---\" \"---\")2(\"---\" \"---\")3"

The matter is that repeat produced a sequence, which interpose dutifully stuck between the numbers in a bigger sequence, and str when processing the bigger sequence dutifully wrote the nested sequences in Clojure syntax. To better control how nested sequences get stringified, you could replace (repeat 2 "---") with (apply str (repeat 2 "---")). But, if the pattern of apply str within apply str occurs over and over, it hurts the program's signal-to-noise ratio. An alternative that may be cleaner is the flatten function (maybe this is its only idiomatic use):

(apply str 
       (flatten 
        (interpose 
         (repeat 2 "---") 
         (range 1 4))))  ;; => "1------2------3"

join - clojure.string, The answer to use (apply str ) is usually the best one. But here is an additional technique, and a "pro tip" about the three dots in (apply str ) . A String literal is constructed in Clojure by enclosing the string text in quotations. Strings in Clojure need to be constructed using the double quotation marks such as “Hello World”. Example. Following is an example of the usage of strings in Clojure.

How to build strings in Clojure, Is there an idiomatic way to build up a string over different lines of (as source) from input data recorded in clojure syntax (by a VBA macro running in excel ). Clojure - Strings upper-case - Converts string to all upper-case.

also, there is the cl-format function in clojure core library, which is the port of common lisp's amazing format facility.

(require '[clojure.pprint :refer [cl-format]])

user> (cl-format nil "~v@{~a~:*~}" 5 "10")
;;=> "1010101010"

user> (cl-format nil "|~{~a|~}" [1 2 3])
;;=> "|1|2|3|"

this one is really powerful, yet the format string can get quite complicated for the reader, in case of really complex string processing templates. Still, for the cases you ask about (join, repeat, iterate, or conditional output), it stays in the bounds of understandable.

there are some examples here, easily translatable from cl to clojure.

PS:

user> (cl-format nil "~r" 234598284579147)
;;=> "two hundred thirty-four trillion, five hundred ninety-eight billion, two hundred eighty-four million, five hundred seventy-nine thousand, one hundred forty-seven"

user> (cl-format nil "~@r" 1232)
;;=> "MCCXXXII"

Idiomatic Way to Build String or Simply Use StringBuilder, Many thanks to Steve Tayon for creating it and Andy Fingerhut for ongoing re- groups (clojure.string/) replace replace-first re-quote-replacement Note: \ in #"" is � (require 'clojure.contrib.str-utils) ;;put in head for enabling us to use re-gsub later on (clojure.contrib.str-utils/re-gsub #" ewline" "<br><br>" your-string-with-todos-separated-with-newlines) This last line will result in the string you like.

Strings | Clojure Documentation, (count string))) ;; or (def value (subs string offset)) ;; Clojure strings are immutable Java strings, so while you cannot ;; modify an existing string, you can build a� Clojure is a functional language. Functions are first-class and can be passed-to or returned-from other functions. Most Clojure code consists primarily of pure functions (no side effects), so invoking with the same inputs yields the same output.

Cheatsheet, There are two main ways to build strings in Clojure: str and format . str On the other hand, format offers a fully-featured string interpolation� Clojure provides command line tools that can be used to start a Clojure repl, use Clojure and Java libraries, and start Clojure programs. See the changelog for version information. After following these installation instructions, you should be able to use the clj or clojure command to start a Clojure repl.

Strings, Concatenate strings; Convert data into string; Build strings made of strings and data; Format numbers; Convert strings into data; The Clojure REPL gives the programmer an interactive development experience. When developing new functionality, it enables her to build programs first by performing small tasks manually, as if she were the computer, then gradually make them more and more automated, until the desired functionality is fully programmed.