请考虑以下事项:
=> (even? (count []))
true
到目前为止一切顺利。现在考虑(假设我的文件是空的):
(odd? (count (str/split (slurp my-file) #"\|")))
true
错误...为什么从空文件返回的向量不均匀(零)?
=>(str/split (slurp my-file) #"\|")
[""]
啊,有人可以解释为什么在这种情况下会返回一个空字符串吗?
我正在尝试确定文件中是否有奇数记录。
答案 0 :(得分:7)
clojure.string/split
使用java.util.regex.Pattern/split
进行拆分。有关说明,请参阅this question about Java。也就是说,split
返回模式第一次匹配之前的所有内容作为第一次分割,即使模式根本不匹配。
测试集合(列表,数组,映射,字符串等)是否为空的规范方法是在其上调用seq
,这将为空集合返回nil
。
(defn odd-number-of-records? [filename]
(let [txt (slurp filename)]
(when (seq txt)
(odd? (count (str/split txt #"\|"))))))