2011-12-08 52 views
6

Tôi có thể đọc một số dữ liệu như thế này trong phần repl. Đối với một chương trình thực sự tôi dự định chỉ định trong một hình thức đặc biệt cho phép.Làm thế nào để chuyển đổi một chuỗi số clojure thành các số nguyên riêng biệt?

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

Nếu tôi nhập 5 5, x1 là ràng buộc để ("5 5")

Tôi muốn chuyển đổi danh sách này của một yếu tố vào một danh sách của hai số nguyên. Làm thế nào tôi có thể làm điều đó? Tôi đã được chơi xung quanh với phân tích chuỗi trên khoảng trắng, nhưng đang gặp khó khăn khi thực hiện chuyển đổi thành số nguyên.

Trả lời

6

Điều này có hữu ích không? Trong 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) 

Trong trường hợp phiên bản Clojure bạn đang sử dụng không có clojure.string namespace bạn có thể bỏ lệnh use và xác định các hoạt động theo cách sau đây.

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

Bạn có thể loại bỏ cụm từ thông dụng bằng cách sử dụng (.split string " ") ở dòng cuối cùng.

+0

Nó phải là '(.split chuỗi # " ")' tất nhiên :) –

+2

@googolplex, '(string .split"")' thực sự. Cảm ơn bạn đã chỉ ra, tôi đã sửa đổi câu trả lời. – Jan

+0

Cảm ơn. Bạn đã tích hợp hai bước, điều này giải thích tại sao tôi nhận được một lỗi về chuyển đổi ký tự và một lỗi khác về chuyển đổi chuỗi thành char. Tôi sẽ thử cái này để chắc chắn. – octopusgrabbus

3

trình cho tất cả các số và lợi nhuận Nil trong trường hợp nó không phải là một con số (do đó bạn có thể lọc ra nils trong seq kết quả)

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

Ví dụ:

(map parse-number (string/split "1 2 3 78 90 -12 0.078" #"\s+")) 
; => (1 2 3 78 90 -12 0.078) 
Các vấn đề liên quan