我想在我发送给谷歌的搜索查询中用加号替换空格字符。
(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的新手,并怀疑我遗漏了一些明显的东西。
答案 0 :(得分:3)
正在创建一个新的固定搜索词,然后忽略固定的搜索词,并将未更改的词传递给browse-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
答案 1 :(得分:2)
请改为尝试:
(defn search-google [search-term]
(browse-url
(str "http://google.ca/search?q="
(clojure.string/replace search-term #"\s+" "+"))))
请注意,模式是正则表达式,您可以使用\s+
指示要替换的字符串匹配应包含一个或多个空格。
另请注意,replace过程会返回 new 字符串,原始字符串不会被修改。
答案 2 :(得分:1)
替换不会就地修改search-term
,而是返回一个被丢弃的副本。
使用let
将此值绑定到函数中的名称,然后使用该名称调用browse-url
。