2

我是 clojuure 的新手。我想拆分 aString然后打印。如果我做 :

(.split "Dasher Dancer Prancer" " ")

它给出了#<String[] [Ljava.lang.String;@64e0e8ca>这只是toString()数组的。

然后如果我这样做:

(.length (.split "Dasher Dancer Prancer" " "))

它给java.lang.IllegalArgumentException: No matching field found: length for class [Ljava.lang.String;

4

2 回答 2

5

改用clojure.string/split

user=> (clojure.string/split "Dasher Dancer Prancer" #" ")
["Dasher" "Dancer" "Prancer"]

无需为此使用 java interop。

如果您需要长度,请使用count

user=> (count (clojure.string/split "Dasher Dancer Prancer" #" "))
3

.split您尝试调用的是对 a 的简单 java 方法调用,String它返回一个数组,然后由 repl 转换为String通过调用toString它。正如您所注意到的,它并没有给您想要的结果。

clojure.string/split另一方面,返回clojure.lang.PersistentVector具有.toString按预期打印内容的方法。

于 2013-08-31T21:33:58.553 回答
4

您可以使用 (alength) 函数:

(alength (.split "Dasher Dancer Prancer" " "))

user=> (doc alength)
clojure.core/alength ([array])
返回 Java 数组的长度。适用于所有类型的数组。

(doc) 和 (find-doc) 对于 Clojure 的日常开发非常重要。

于 2013-08-31T23:24:32.070 回答