【问题标题】:Split String in clo​j​ure and then print在clo​j​ure中拆分字符串然后打印
【发布时间】:2013-09-04 08:51:07
【问题描述】:

我是 clojure 的新手。我想拆分 String 然后打印。如果我这样做:

(.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;

【问题讨论】:

  • 如果你得到了答案,请选择一个。

标签: arrays string printing clojure


【解决方案1】:

改用clojure.string/split

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

不需要为此使用 java 互操作。

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

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

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

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

【讨论】:

  • 好答案。 ​clojure.string/splitsplit 有什么区别?
  • @javaguy split 是什么意思? split 在什么命名空间中?还是你的意思是.split
  • @soulcheck 是的,我的意思是 clojure.string/split 只是 .split。
【解决方案2】:

你可以使用(alength)函数:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    相关资源
    最近更新 更多