Как мне преобразовать строку в два целых числа в Clojure? - PullRequest
2 голосов
/ 02 октября 2011

Строка в кодировке json передается в мою функцию, и мне нужно разделить эту строку на основе разделителя, а затем преобразовать первые два значения с разделителями в целые числа и назначить их переменным, которые будут использоваться внутри функции. У меня есть код, который работает, хотя мне он кажется неуклюжим.

(:use [clojure.string :only (split trim)])
(:use [clojure.data.json :only (json-str write-json read-json)])

(defn parse-int [s] (Integer. (re-find #"[0-9]*" s)))

(map parse-int (take 2
  (map trim (seq (.split #"\|"
    (read-json "\" 123 | 456 | 789 \""))))))

Для простоты я жестко запрограммировал входное значение сэмпла, поэтому его легко воспроизвести в REPL.

Я ожидаю результата: (123 456) (который в моем коде назначен на (let [[a b])

Как я уже сказал, этот код работает, но я чувствую, что мне не хватает чего-то, что сделало бы его менее уродливым, более идиоматичным.

1 Ответ

1 голос
/ 02 октября 2011

Мне кажется, это понятнее:

(:use [clojure.string :only (split trim)])
(:use [clojure.data.json :only (read-json)])

(map #(Integer/valueOf (trim %)) 
     (split (read-json input) #"\|"))

при условии, что input является вашей входной строкой.

Integer/valueOf (альтернативно Integer/parseInt), кажется, главное, что ты пропустил. Нет необходимости в регулярных выражениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...