5

我正在尝试将连字符字符串转换为 CamelCase 字符串。我关注了这篇文章:Convert hyphens to camel case (camelCase)

(defn hyphenated-name-to-camel-case-name [^String method-name]
  (clojure.string/replace method-name #"-(\w)" 
                          #(clojure.string/upper-case (first %1))))


(hyphenated-name-to-camel-case-name "do-get-or-post")
==> do-Get-Or-Post

为什么我仍然得到输出字符串的破折号?

4

3 回答 3

7

您应该替换firstsecond

(defn hyphenated-name-to-camel-case-name [^String method-name]
  (clojure.string/replace method-name #"-(\w)" 
                          #(clojure.string/upper-case (second %1))))

您可以clojure.string/upper-case通过插入println代码来检查得到的参数:

(defn hyphenated-name-to-camel-case-name [^String method-name]
  (clojure.string/replace method-name #"-(\w)" 
                          #(clojure.string/upper-case
                            (do
                              (println %1)
                              (first %1)))))

当你运行上面的代码时,结果是:

[-g g]
[-o o]
[-p p]

向量的第一个元素是匹配的字符串,第二个是捕获的字符串,这意味着你应该使用second,而不是first

于 2013-06-16T23:31:42.567 回答
6

如果您的目标只是在案例之间进行转换,我真的很喜欢camel-snake-kebab库。 ->CamelCase是有问题的函数名称。

于 2013-06-17T00:57:10.893 回答
1

受此线程启发,您也可以这样做

(use 'clojure.string)

(defn camelize [input-string] 
  (let [words (split input-string #"[\s_-]+")] 
    (join "" (cons (lower-case (first words)) (map capitalize (rest words)))))) 
于 2013-06-17T10:30:42.127 回答