Een string met hoofdletters maken

Clojure:
Een string met hoofdletters maken

Hoe te:

In Clojure is er geen ingebouwde functie om strings direct te kapitaliseren. Je maakt er zelf een met de clojure.string bibliotheek. Hier is een snelle manier:

(require '[clojure.string :as str])

(defn capitalize [s]
  (when s
    (str/capitalize s)))

(capitalize "hello world") ; => "Hello world"

Voorbeelduitvoer voor de capitalize functie:

(capitalize "clojure") ; => "Clojure"
(capitalize "123clojure") ; => "123clojure"
(capitalize "") ; => nil
(capitalize nil) ; => nil

Diepere Duik

Clojure’s standaardbibliotheek, clojure.string, prefereert eenvoud. Daarom geen kant-en-klare capitalize functie zoals je die in andere talen zou vinden. Historisch gezien leunt Clojure op Java’s String methoden, die basismanipulatie bieden, maar geen capitalize.

Dit gebrek drijft je ertoe om ofwel je eigen oplossing te schrijven, zoals hierboven, of externe bibliotheken te gebruiken. Er is ook een capitalize van clojure.contrib.string, een historisch aparte contrib bibliotheek voordat deze werd afgeschaft en deels samengevoegd met clojure.string in latere versies.

De eenvoud van de str/capitalize functie betekent dat het alleen bezig is met het eerste teken. Voor meer genuanceerde kapitalisatie, zoals titelcasus of het omgaan met internationale karakters, moet je een aangepaste oplossing schrijven of een Java-bibliotheek gebruiken.

Hier is een alternatieve aangepaste functie die omgaat met strings met meerdere woorden:

(defn title-case [s]
  (->> s
       (str/split #"\s+")
       (map str/capitalize)
       (str/join " ")))

(title-case "the lord of the rings") ; => "The Lord Of The Rings"

Opnieuw wordt internationalisering (i18n) hier niet behandeld; het correct omgaan met Unicode is een heel ander beest, vaak vereist het gespecialiseerde bibliotheken.

Zie Ook