2013-06-16 12 views
5

Sto provando a convertire una stringa con trattino in una stringa CamelCase. Ho seguito questo post: Convert hyphens to camel case (camelCase)Convertire la stringa con trattino in 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 

Perché sto ancora ricevendo il trattino stringa di output?

+0

È letto male ciò che è stato utilizzato nella funzione di sostituzione, gli indici degli array in JavaScript partono da 0 :) –

risposta

7

È necessario sostituire first con second:

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

È possibile controllare quale argomento clojure.string/upper-case ottiene inserendo println al codice:

(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))))) 

Quando si esegue il codice di cui sopra, il risultato è:

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

Il primo elemento del vettore è la stringa con corrispondenza e il secondo è la stringa catturata, che significa che è necessario utilizzare second, non first.

4

Nel caso in cui il tuo obiettivo è solo quello di convertire tra casi, mi piace molto la libreria camel-snake-kebab. ->CamelCase è il nome della funzione in questione.

1

ispirato this thread, si potrebbe anche fare

(use 'clojure.string) 

(defn camelize [input-string] 
    (let [words (split input-string #"[\s_-]+")] 
    (join "" (cons (lower-case (first words)) (map capitalize (rest words)))))) 
Problemi correlati