2013-07-16 51 views
5

我是Clojure的新手。我正在定義一個包含字符串值的向量。要求是從輸入向量中檢索用逗號分隔的字符串值。例如:逗號分隔的字符串值來自一個Vector

(def my-strings ["one" "two" "three"]) 

我的預期輸出應該是:

"one", "two", "three" 

我試圖interposejoin,如下圖所示:

(apply str (interpose "," my-strings)) 
(clojure.string/join "," my-strings) 

兩個返回"one,two,three"但我需要用雙包圍的字符串引用""就像我上面的例子。

回答

2

使用map包圍每個字符串加上引號,注意我們如何表示使用\",字符文字一個單引號:

(clojure.string/join "," (map #(str \" % \") my-strings)) 
=> "one","two","three" 

被警告,雖然:一個字符串是包含在""字符內的文本,但報價本身不是字符串的一部分。所以"one,two,three"輸出本身沒有錯,除非你真的很需要這些額外的引號圍繞文本。

+0

字符文字也是允許的「%\」)my-strings)...' –

+0

@ A.Webb看起來更好,我編輯了我的答案。謝謝:) –

+1

引用換行也恰好是字符串對象打印機的行爲:'(clojure.string/join「,」(map pr-str my-strings))''。 –

0

您的預期輸出決不可能是「one」,「two」,「three」。那麼會是什麼類型?動態類型不是無類型的。但是,當然,你可以把它作爲字符串。而且這個字符串必須在repl中以某種方式表示。

另外請記住逗號,在Clojure中是空格。

特殊字符,例如「,應該被轉義,在這種情況下:\」。

您在repl中看到的引號不是字符串的一部分(除非已轉義)。字符串是一個,而不是「one」。如果你想要「one」,你會看到「\」one \「」

Óscar的答案並不精確。代碼不會輸出那裏顯示的內容。它輸出「\」一個\「,\」二\「,\」三\「」。 (您可以在之後添加一個額外的空間,以完全符合您的要求。)。

不過,他的回答是正確:它給你正是你想要的。它是由雙引號包圍,後跟一個逗號字一個的字符串,等等

嘗試到文件中。我做了(在逗號後添加額外的空格)。該文件有:

"one", "two", "three" 

乾杯 -

附: LightTable真棒!

0

下也做的伎倆:

(let [strs ["one" "two" "three"]] 
    (println 
    ;;    outer quote  strings outer quote 
    (apply str (flatten [\" (interpose "\",\"" strs) \"])))) 

輸出:`...(圖#(STR \:如果你想節省幾個按鍵

user=> (let [strs ["one" "two" "three"]] (println (apply str (flatten [\" (interpose "\",\"" strs) \"])))) 
"one","two","three" 
nil 
user=>