gpt4 book ai didi

clojure - 在clojure中剥离元音

转载 作者:行者123 更新时间:2023-12-03 18:13:07 27 4
gpt4 key购买 nike

我正在尝试编写一个函数来去除 Clojure 中的所有 ASCII 元音。我是 Clojure 的新手,我在使用字符串时遇到了一些麻烦。例如字符串 "hello world"会返回 "hll wrld" .我感谢您的帮助!

最佳答案

为此,您可以利用字符串类上的底层函数。

user=> (.replaceAll "hello world" "[aeiou]" "")           
"hll wrld"

如果感觉像是作弊,您可以将字符串转换为 seq,然后使用集合的补集对其进行过滤,然后再将其转换回字符串。
user=> (apply str (filter (complement #{\a \e \i \o \u}) (seq "hello world")))
"hll wrld"

clojure 中的集合也是函数。 complement接受一个函数并返回一个函数,该函数返回原始函数的逻辑非。它相当于这个。 apply接受一个函数和一堆参数,并用这些参数调用该函数(粗略地说)。
user=> (apply str (filter #(not (#{\a \e \i \o \u} %)) (seq "hello world")))
"hll wrld"

编辑

多一个...
user=> (apply str (re-seq #"[^aeiou]" "hello world"))
"hll wrld"
#"[^aeiou]"是一个正则表达式,re-seq 将匹配转换为 seq。它类似于 clojure,并且似乎表现良好。我可能会在下降到 Java 之前尝试这个。 seq 字符串的速度要慢一些。

重要编辑

还有一种方法,那就是使用 clojure.string/replace .鉴于它应该在 Clojure 或 Clojurescript 中工作,这可能是最好的方法。

例如
dev:cljs.user=> (require '[clojure.string :as str])
nil

dev:cljs.user=> (str/replace "hello world" #"[aeiou]" "")
"hll wrld"

关于clojure - 在clojure中剥离元音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13042609/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com