Преобразование строки в верхний регистр

Clojure:
Преобразование строки в верхний регистр

Как это сделать:

В Clojure нет встроенной функции для прямого преобразования строк в заглавную форму. Вы создаёте свою с помощью библиотеки clojure.string. Вот быстрый способ:

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

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

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

Пример вывода для функции capitalize:

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

Погружение

Стандартная библиотека Clojure, clojure.string, предпочитает простоту. Таким образом, нет готовой функции capitalize, какую вы могли бы найти в других языках. Исторически Clojure опирается на методы строки Java, которые предлагают базовую манипуляцию, но не capitalize.

Этот недостаток толкает вас либо к написанию собственного решения, как показано выше, либо к использованию внешних библиотек. Также есть capitalize из clojure.contrib.string, исторически отдельная contrib библиотека, до того, как она была устаревшей и частично объединена с clojure.string в более поздних версиях.

Простота функции str/capitalize означает, что она занимается только первым символом. Для более нюансированного преобразования, например, преобразования в стиле названий или обработки международных символов, вам нужно написать собственное решение или воспользоваться Java библиотекой.

Вот альтернативная пользовательская функция, которая обрабатывает строки с несколькими словами:

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

Снова, интернационализация (i18n) здесь не рассматривается; корректная обработка Unicode - это совсем другой вопрос, часто требующий специализированных библиотек.

Смотрите также