2013-07-16 8 views
5

Clojureを初めて使用しました。私は文字列値を含むベクトルを定義しています。入力ベクトルからコンマで区切られた文字列値を検索する必要があります。たとえば:ベクターからのカンマ区切り文字列値

(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で表示される引用符は、(エスケープされていない限り)文字列の一部ではありません。文字列はであり、"1"ではありません。 を "1"にする場合は、"\" one \ ""が表示されます。

Óscarの回答は正確ではありません。コードはそこに表示されているものを出力しません。 "\" one \ "、\" two \ "、\" three \ ""を出力します。 (あなたの要件に正確に合致するように、余分なスペースを1つ追加することができます)。

しかし、彼の答えはです。:これはあなたが望むものを正確に与えます。これは、ファイルにそれをを吐く

てみにカンマで二重引用符で囲まれ、続く言葉からなる文字列、などです。私は(コンマの後に余分なスペースを追加して)しました。ファイルが持っていた:

"one", "two", "three" 

乾杯 -

P.S.を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=> 
関連する問題