Clojure字符串/替换在我的函数中失败
我想在发送给google的搜索查询中用加号替换空格字符Clojure字符串/替换在我的函数中失败,clojure,Clojure,我想在发送给google的搜索查询中用加号替换空格字符 (defn search-google [search-term] (clojure.string/replace search-term #" " "+") (browse-url (str "http://google.ca/search?q=" search-term))) 但是,我的函数失败,因为我的搜索词保留了空格 (search-google "clojure user input") URISyn
(defn search-google [search-term]
(clojure.string/replace search-term #" " "+")
(browse-url
(str "http://google.ca/search?q=" search-term)))
但是,我的函数失败,因为我的搜索词保留了空格
(search-google "clojure user input")
URISyntaxException Illegal character in query at index 32:
http://google.ca/search?q=clojure user input java.net.URI$Parser.fail (:-1)
我是clojure的新手,我怀疑我遗漏了一些明显的东西。试试这个:
(defn search-google [search-term]
(browse-url
(str "http://google.ca/search?q="
(clojure.string/replace search-term #"\s+" "+"))))
请注意,该模式是一个正则表达式,您可以使用\s+
指示要替换的字符串匹配应包含一个或多个空格
还要注意,替换过程返回一个新字符串,而原始字符串不会被修改。replace不会就地修改
搜索词,而是返回它的一个副本,该副本将被丢弃
使用let
将此值绑定到函数中的名称,并使用该值调用browse url
。正在创建一个新的固定搜索词,然后忽略固定搜索词,并将未更改的搜索词传递到浏览url:
(def browse-url println)
(defn search-google [search-term]
(let [fixed-search-term (clojure.string/replace search-term #" " "+")]
(browse-url
(str "http://google.ca/search?q=" fixed-search-term))))
user> (search-google "a b c")
http://google.ca/search?q=a+b+c
nil
对不起,那没用。也许我必须将搜索项
重新绑定到它的新值。在python中,它应该是search\u term=search\u term.replace(“”,+)
@exbctel无需这样做,字符串在作为参数传递之前格式正确,要查看它,请尝试以下操作:(str)http://google.ca/search?q=“(clojure.string/replace“abcd”#“\s++”)
搜索词中可能还有其他错误字符?谢谢。将字符串/replace
移动到浏览url
工作正常。然而,我最终使用了Arthur和Andrew建议的let
重新绑定。@exbctel不客气!请记住,let
是有用的,但不是使代码工作所必需的-您可以直接传递值,如上图所示。还要注意的是,其他答案没有考虑到Anks Arthur和@andrewdotnich之间有多个空格用于解释let
。