2012-10-21 109 views
15

Emacs Lisp中是否有與split-string相反的功能,即將列表中的元素連接到由給定定界符分隔的字符串中?換句話說,是否有一個給定列表的函數,例如("foo" "bar" "baz"),和一個定界符,例如, ", ",將該列表作爲由該分隔符分隔的字符串返回,例如, "foo, bar, baz"是否有一個函數將字符串連接到分隔字符串中?

Common Lisp seems to have such a function但Emacs Lisp中的同名函數,format是一個完全不同的函數。

回答

25

我認爲你正在尋找mapconcat

mapconcat適用功能序列的每個元素:它必須是字符串,是級聯的結果, 。在每對結果 字符串之間,插入字符串分隔符mapconcat。通常分隔符 包含空格或逗號或其他合適的標點符號。

+21

['(mapconcat '身份'( 「foo」 的 「條」, 「巴茲」) 「」)'](HTTP://www.rhinocerus .net/forum/lang-lisp/576185 -emacs-lisps-mapconcat-common-lisp.html#post2300674) –

+2

該示例使這個答案更有用。 –

+1

emacs 24.5'24.5/lisp/emacs-lisp/subr-x.el'的默認包具有與@ N.N提及的相同的功能。命名爲'string-join'。 – user927387

7

如果您在使用elisp的字符串操作嚴重,我建議你安裝一個庫s.el,這對字符串廣闊的和一致的API。對於你的任務它有一個功能s-join

(s-join "+" '("abc" "def" "ghi")) ;; => "abc+def+ghi" 
(s-join "\n" '("abc" "def" "ghi")) ;; => "abc\ndef\nghi" 
2

取決於你在做什麼,有可能是一個更好的功能,例如,如果你正在構建的命令行參數,使用combine-and-quote-strings該做的工作適合你。

(combine-and-quote-strings '("foo" "bar" "baz") ", ") 
"foo, bar, baz" 
+0

對我來說,這似乎是「正確的」答案。 – robert

8

的Emacs 25具有string-join

(string-join '("one" "two" "three") ", ") ; ==> "one, two, three" 
相關問題