9

我在 Clojure 中有一个字符串,我想在第 n 个和第 (n+1) 个字符之间放入一个字符。例如:假设字符串是“aple”,我想在“p”和“l”之间插入另一个“p”。

  (prn 
     (some-function "aple" "p" 1 2)) 

  ;; prints "apple" 
  ;; ie "aple" -> "ap" "p" "le" and the concatenated back together.

我发现这有点挑战性,所以我想我缺少一些有用函数的信息 有人可以帮我写上面的“一些函数”,它需要一个字符串、另一个字符串、一个开始位置和一个结束位置并将第二个字符串插入到开始位置和结束位置之间的第一个字符串中?提前致谢!

4

1 回答 1

12

比使用 seq 函数更有效:

(defn str-insert
  "Insert c in string s at index i."
  [s c i]
  (str (subs s 0 i) c (subs s i)))

来自 REPL:

user=> (str-insert "aple" "p" 1)
"apple"

注意。这个函数实际上并不关心 的类型c,或者在字符串的情况下它的长度;(str-insert "aple" \p 1)并且(str-insert "ale" "pp" 1)也可以工作(通常,(str c)将使用,如果c是,则为空字符串nil(.toString c)否则为空字符串)。

由于该问题要求一种惯用的方式来执行手头的任务,我还要指出,我发现在专门处理字符串时使用面向字符串的函数更可取(就“语义匹配”以及性能优势而言) ; 这包括subsclojure.string. 有关惯用字符串处理的讨论,请参阅源代码顶部的设计说明。clojure.string

于 2013-05-16T05:43:02.457 回答