32

Emacs Lispには、の反対を行う関数がありsplit-stringますか?つまり、リストの要素を指定された区切り文字で区切られた文字列に結合しますか?言い換えると、リスト(例("foo" "bar" "baz"))と区切り文字(例)を指定すると、", "そのリストがその区切り文字で区切られた文字列(例:)として返される関数はありますか"foo, bar, baz"

Common Lispはそのような関数を持っているようですが、EmacsLispの同じ名前の関数formatはまったく異なる関数です。

4

4 に答える 4

48

私はあなたがmapconcatを探していると思います:

mapconcatシーケンスの各要素に関数を適用します。結果は文字列である必要があり、連結されます。結果文字列の各ペアの間にmapconcat、文字列区切り文字を挿入します。通常、区切り文字にはスペース、コンマ、またはその他の適切な句読点が含まれます。

于 2012-10-21T16:37:17.593 に答える
41

Emacsはstring-join24.4以降の一部として持っていsubr-x.elます:

(eval-when-compile (require 'subr-x))
(string-join '("one" "two" "three") ", ") ; ==> "one, two, three"

subr-x.el他の便利な(文字列操作)関数も含まれています-24.4リリースノートから:

New library subr-x.el for misc helper functions

hash-table-keys
hash-table-values
string-blank-p
string-empty-p
string-join
string-reverse
string-trim-left
string-trim-right
string-trim
string-remove-prefix
string-remove-suffix
于 2016-11-16T13:29:08.237 に答える
12

Elispで文字列操作を多用する場合は、s.el文字列用の広大で一貫性のあるAPIを備えたライブラリをインストールすることをお勧めします。あなたのタスクのためにそれは機能を持っていますs-join

(s-join "+" '("abc" "def" "ghi")) ;; => "abc+def+ghi"
(s-join "\n" '("abc" "def" "ghi")) ;; => "abc\ndef\nghi"
于 2014-04-22T10:50:47.273 に答える
8

何をしているのかによっては、より良い関数があるかもしれません。たとえば、コマンドライン引数を作成combine-and-quote-stringsしている場合は、これを使用して作業を行います。

(combine-and-quote-strings '("foo" "bar" "baz") ", ")
"foo, bar, baz"
于 2016-03-30T18:00:28.370 に答える