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

Я могу прочитать некоторые данные в ответ на это.Для реальной программы я планирую назначить в специальной форме let.

(def x1 (line-seq (BufferedReader. (StringReader. x1))))

Если я введу 5 5, x1 будет привязан к ("5 5")

Я хотел бы преобразоватьэтот список из одного элемента в список из двух целых чисел.Как я могу это сделать?Я пытался разобрать строку в пробеле, но у меня проблемы с выполнением преобразования в целое число.

Ответы [ 2 ]

8 голосов
/ 08 декабря 2011

Это помогает? В Clojure 1.3.0:

(use ['clojure.string :only '(split)])
(defn str-to-ints
  [string]
  (map #(Integer/parseInt %)
        (split string #" ")))
(str-to-ints "5 4")
; => (5 4)
(apply str-to-ints '("5 4"))
; => (5 4)

Если используемая версия Clojure не имеет пространства имен clojure.string, можно пропустить команду use и определить функцию следующим образом.

(defn str-to-ints
  [string]
  (map #(Integer/parseInt %)
        (.split #" " string)))

Вы можете избавиться от регулярных выражений, используя (.split string " ") в последней строке.

4 голосов
/ 06 сентября 2012

Работает для всех чисел и возвращает ноль в случае, если это не число (так что вы можете отфильтровать нули в результирующем результате)

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

(defn parse-number
  "Reads a number from a string. Returns nil if not a number."
  [s]
  (if (re-find #"^-?\d+\.?\d*$" s)
    (read-string s)))

Например

(map parse-number (string/split "1 2 3 78 90 -12 0.078" #"\s+"))
; => (1 2 3 78 90 -12 0.078)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...