我试图编写一个函数去除Clojure中的所有ASCII元音。我对Clojure很陌生,并且对字符串有点麻烦。例如,字符串"hello world"
将返回"hll wrld"
。我感谢帮助!clojure中的剥离元音
4
A
回答
15
您可以利用字符串类的基础功能。
user=> (.replaceAll "hello world" "[aeiou]" "")
"hll wrld"
如果感觉就像作弊,你可以把该字符串转换成一个序列,然后用一组的补过滤,然后把那回字符串。
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]"
是一个正则表达式,并重新打开序列比赛成起。它像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"
8
比尔是大多数是正确的,但错误的,足以保证这个答案,我认为。
user=> (.replaceAll "hello world" "[aeiou]" "")
"hll wrld"
该解决方案完全可以接受。事实上,这是最好的解决方案。如果解决方案是最干净和最快的解决方案,那么下降到Java没有任何问题。
另一种解决方案就像他说的那样使用序列函数。但是,他的代码有点奇怪。切勿使用filter
与(not ..)
或complement
。还有一个功能,专为,remove
:
user> (apply str (remove #{\a \e \i \o \u} "hello world"))
"hll wrld"
你也不必调用seq
的字符串。所有Clojure的seq函数都会为你处理。
他最后的解决方案很有趣,但我更喜欢第一个,因为它不涉及(apply str ..)
。
相关问题
- 1. 仅剥离空根元素
- 2. 剥离中的R
- 3. 剥离的#define
- 4. 剥离Linux中的内核?
- 5. 剥离链接中的file.html
- 6. 通过命令提示符剥离VOB文件中的音频
- 7. 分离元音和辅音
- 8. 剥离从CALS
- 9. Joomla剥离#usemap
- 10. XmlNodes剥离HTML
- 11. TinyMCE剥离HTML
- 12. 剥离在Oracle
- 13. 剥离串
- 14. 最后剥离“\”
- 15. 在Rails中剥离标签
- 16. 从url中剥离文本
- 17. 从csv文件中剥离“$”
- 18. 剥离外国口音的MySQL的查询
- 19. 剥离高/低ascii
- 20. 剥离URL参数
- 21. Sharepoint剥离HTTP头
- 22. 剥离span标签
- 23. imap_fetchbody和剥离行
- 24. 剥离从列表
- 25. 剥离HTML标签?
- 26. HtmlDocument.Write剥离引号
- 27. 剥离字符串
- 28. 剥离空白PHP
- 29. Django httpresponse剥离CR
- 30. render_to_string剥离标记
非常有帮助,非常感谢你 –
@JoeCrawley感谢您接受答案。我刚刚添加了一个,可能是最好的。祝你好运! – Bill
'还有'(remove pred ...)'(filter(补偿pred)...)'。你不必在字符串上调用'seq'。序列函数以您的名义完成。 – kotarak