Я ищу эквивалент replace-regexp-in-string
, который просто использует литеральные строки, никаких регулярных выражений.
(replace-regexp-in-string "." "bar" "foo.buzz") => "barbarbarbarbarbarbarbar"
Но я хочу
(replace-in-string "." "bar" "foo.buzz") => "foobarbuzz"
Я пробовал различные функции replace-*
, но не могу понять.
Edit
В ответ на сложные ответы я решил сравнить их (да, я знаю, что все тесты ошибочны, но это все еще интересно).
Выходной сигнал 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 с цитируемыми regexp-победами. Временные буферы делают замечательно хорошо.
Изменить 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 выглядит хорошо