replace-regexp-in-string
リテラル文字列のみを使用し、正規表現を使用しないものと同等のものを探しています。
(replace-regexp-in-string "." "bar" "foo.buzz") => "barbarbarbarbarbarbarbar"
でも私はしたい
(replace-in-string "." "bar" "foo.buzz") => "foobarbuzz"
いろいろreplace-*
機能を試してみましたがわかりません。
編集
精巧な回答と引き換えに、私はそれらをベンチマークすることにしました (そうです、すべてのベンチマークが間違っていることは知っていますが、それでも興味深いものです)。
の出力benchmark-run
は次の(time, # garbage collections, GC time)
とおりです。
(benchmark-run 10000
(replace-regexp-in-string "." "bar" "foo.buzz"))
=> (0.5530160000000001 7 0.4121459999999999)
(benchmark-run 10000
(haxe-replace-string "." "bar" "foo.buzz"))
=> (5.301392 68 3.851943000000009)
(benchmark-run 10000
(replace-string-in-string "." "bar" "foo.buzz"))
=> (1.429293 5 0.29774799999999857)
replace-regexp-in-string が引用符で囲まれた正規表現に置き換えられます。一時バッファは非常にうまく機能します。
編集 2
今コンパイルで!10倍以上の反復を行う必要がありました:
(benchmark-run 100000
(haxe-replace-string "." "bar" "foo.buzz"))
=> (0.8736970000000001 14 0.47306700000000035)
(benchmark-run 100000
(replace-in-string "." "bar" "foo.buzz"))
=> (1.25983 29 0.9721819999999983)
(benchmark-run 100000
(replace-string-in-string "." "bar" "foo.buzz"))
=> (11.877136 86 3.1208540000000013)
haxe-replace-string は良さそうです