Clojure字符串/替换在我的函数中失败



我想在发送给谷歌的搜索查询中用加号替换空格字符。

(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的新手,怀疑我错过了一些显而易见的东西。

正在创建一个新的固定搜索词,然后忽略固定的搜索词,并将未更改的搜索词传递给浏览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    

试试这个:

(defn search-google [search-term]
  (browse-url 
   (str "http://google.ca/search?q="
        (clojure.string/replace search-term #"s+" "+"))))

请注意,该模式是一个正则表达式,您可以使用s+来指示要替换的字符串匹配应该包括一个或多个空格。

还要注意,替换过程返回一个字符串,原始字符串不会被修改。

Replace不会就地修改search-term,而是返回它的一个副本,该副本将被丢弃。

使用let将该值绑定到函数中的名称,并使用该名称调用browse-url

最新更新