逗号分隔Vector中的String值

时间:2013-07-16 14:16:02

标签: string vector clojure comma

我是Clojure的新手。我正在定义一个包含字符串值的向量。要求是从输入向量中检索由逗号分隔的String值。例如:

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

我的预期输出应为:

"one", "two", "three" 

我尝试了interposejoin,如下所示:

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

返回"one,two,three",但我需要用双引号""包围的每个字符串,如上例所示。

3 个答案:

答案 0 :(得分:2)

使用map用引号括住每个字符串,并注意我们如何使用字符文字\"表示单引号:

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

但请注意:字符串是""字符中包含的文本,但引号本身不是字符串的一部分。所以"one,two,three"输出本身并没有错,除非你真的需要那些围绕文本的额外引号。

答案 1 :(得分:0)

您的预期输出绝不可能是“one”,“two”,“three”。那是什么类型的呢?动态类型不是非类型。但是,当然,你可以把它作为字符串。这个字符串必须以某种方式在repl。

中表示

另外请记住,逗号,在Clojure中是空格。

特殊字符,例如“,应该被转义。在这种情况下:\”。

您在repl中看到的引号不是字符串的一部分(除非转义)。字符串是一个,而不是“一个”。如果你想要“one”,你会看到“\”one \“”

Óscar的答案并不准确。代码不输出那里显示的内容。它输出“\”one \“,\”two \“,\”three \“”。 (您可以在之后添加一个额外的空格,以完全符合您的要求。)。

尽管如此,他的回答是正确:它可以为您提供您想要的内容。它是一个字符串,由一个单词一个组成,用双引号括起来,后面跟一个逗号等。

尝试将吐出到一个文件中。我做了(用逗号后添加了额外的空格)。该文件有:

"one", "two", "three"

干杯 -

P.S。 LightTable很棒!!!

答案 2 :(得分:0)

以下也有诀窍:

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

输出:

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