2011-01-17 52 views
26

Tôi hiện đang gặp sự cố khi tôi phải đọc tệp văn bản từ dòng lệnh chứa ít nhất một số nguyên. Tôi đang đọc các tập tin, làm một biểu thức thường xuyên phù hợp để bỏ qua khoảng trắng.Chuyển đổi chuỗi chuỗi thành số nguyên (Clojure)

(re-seq #"[0-9]+" (slurp (first *command-line-args*))) 

Sau này, tôi phải viết toàn bộ hàm để chuyển chuỗi chuỗi này thành chuỗi số nguyên. Dường như tôi không thể ánh xạ Integer. vào chuỗi (trừ khi tôi đang sử dụng bản đồ không chính xác).

Có cách nào thanh lịch để xử lý việc này, điều gì đó tương tự với bản đồ không? Hoặc tôi có phải đi qua đệ quy popping off đầu tiên và đúc nó để Integer. để có được điều này để làm việc?

Tôi hiện đang học Clojure và khi tôi học bit, tôi sẽ quay lại và thực hiện các câu đố lập trình nhỏ mà tôi đã sử dụng để chọn các ngôn ngữ khác.

Trả lời

45

Bạn đang tìm kiếm Integer/parseInt.

user=> (map #(Integer/parseInt %) ["1" "2" "3" "4"]) 
(1 2 3 4) 

Bạn phải quấn Integer/parseInt trong một chức năng ẩn danh vì phương pháp Java không hoạt động.

read-string cũng sẽ làm việc trong trường hợp này:

user=> (map read-string ["1" "2" "3" "4"]) 
(1 2 3 4) 

read-string đọc bất kỳ đối tượng từ một chuỗi, không chỉ là số nguyên. Vì vậy, nếu bạn đã thực hiện (read-string "1.0"), bạn sẽ nhận được gấp đôi. Khi đọc từ các nguồn bên ngoài, thường tốt hơn là giới hạn những gì có thể được đọc chính xác những gì bạn cần, đó là một số nguyên trong trường hợp này. Vì vậy, tôi khuyên bạn nên sử dụng ví dụ đầu tiên của tôi.

+0

Ah, hoạt động! Cảm ơn bạn! –

+2

+1 Không có ý tưởng về chuỗi đọc, nhưng biết phải có một cái gì đó giống như nó – twneale

+1

Điều này hoạt động rất tốt, nhưng chỉ khi clojure đang chạy trên JVM. ClojureCLR không phải là –

Các vấn đề liên quan