clojure和
java中的拆分将正则表达式作为要拆分的参数.但我只是想用普通的char来分裂.传入的字符可能是“|”,“,”,“”等等如何用该字符分割一行?
我需要一些功能,如(split string a-char).并且此功能将以非常高的频率调用,因此需要良好的性能.好的解决方案.
解决方法
只需通过正确转义特殊字符使您的角色成为正则表达式,并使用默认的正则表达式分割(迄今为止速度最快).
(defn char-to-regex [c] (re-pattern (java.util.regex.Pattern/quote (str c))))
如果版本在regexp的特殊字符范围内,则此版本将生成一个退出单个字符的正则表达式
(defn char-to-regex [c] (if ((set "<([{\\^-=$!|]})?*+.>") c) (re-pattern (str "\\" c)) (re-pattern c)))
确保绑定正则表达式,因此如果需要进行多次拆分,则不要反复调用char-to-regex
(let [break (char-to-regex \|)] (clojure.string/split "This is | the string | to | split" break)) => ["This is " " the string " " to " " split"]