【问题标题】:Split string in ClojureClojure中的拆分字符串
【发布时间】:2015-03-19 20:26:15
【问题描述】:

我还是 Clojure 的新手;我正在尝试拆分从 CSV 文件解析的值,但不使用 clojure.string/split lib 或任何其他 lib 只是 clojure.core,请帮助,在此先感谢。

【问题讨论】:

  • clojure.string 是“核心”库的一部分 - 使用它不需要外部依赖项。为什么不使用它?如果这是一个练习,请向我们展示您的尝试。
  • 介意分享,为什么?这是作业吗?

标签: clojure


【解决方案1】:

你可以用 re-seq 和 string/split 来完成同样的结果

user> (clojure.string/split "a,b,c,d,e" #",")
["a" "b" "c" "d" "e"]

user> (re-seq #"[^,]+" "a,b,c,d,e")
("a" "b" "c" "d" "e")

这两个都没有依赖关系,因此在许多情况下没有理由不使用字符串/拆分。

如果你愿意添加依赖,解析 CSV 也是一个不错的选择:

user> (require '[clojure.data.csv :as csv])
nil
user> (csv/read-csv "A,B,C\n1,2,3\n4,5,5")
(["A" "B" "C"] ["1" "2" "3"] ["4" "5" "5"])

【讨论】:

  • (re-seq #"[^,]" "abc,d") ;; => ("a" "b" "c" "d") - 我认为 OP 想要 #"[^,]+"
  • @ArthurUlfeldt 非常感谢您;
  • @Kyle 也谢谢 :)
  • clojure.data.csv 不是内置的。您需要将其添加为依赖项。
  • 哎呀,那是 clojure.data.json/read-str 而不是默认情况下的 csv。我将从答案中删除最后一点。感谢您的检查
【解决方案2】:

如果您的双手被束缚而无法使用 clojure.stringclojure.data.csvre-seq 或互操作:

(defn comma-separate [s]
  (->> s
      (partition-by #{\,})
      (take-nth 2)
      (map #(apply str %))))

(comma-separate "foo,bar") ;; ("foo" "bar")

我同意你应该使用clojure.stringclojure.data.csv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多