2

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

(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的新手,怀疑我遗漏了一些明显的东西。

4

3 回答 3

3

正在创建一个新的固定搜索词,然后忽略固定搜索词并将未更改的搜索词传递给浏览 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    
于 2013-02-19T23:41:58.217 回答
2

试试这个:

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

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

另请注意,replace 过程返回一个字符串,而不修改原始字符串。

于 2013-02-19T23:38:32.980 回答
1

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

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

于 2013-02-19T23:41:55.777 回答