2

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")

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

新しい固定検索語が作成され、固定検索語は無視され、変更されていない検索語が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    
于 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+置換する文字列の一致に1つ以上のスペースを含める必要があることを示すために使用できることに注意してください。

また、replaceプロシージャは新しい文字列を返し、元の文字列は変更されないことに注意してください。

于 2013-02-19T23:38:32.980 に答える
1

Replaceはインプレースで変更しませんが、破棄search-termされているコピーを返します。

letこの値を関数内の名前にバインドし、代わりにそれを使用して呼び出すために使用しbrowse-urlます。

于 2013-02-19T23:41:55.777 に答える