2014-10-15 7 views
40

मैं अगर एक जावा स्ट्रिंग मेरी परीक्षणों में सबस्ट्रिंग शामिल जांच करने की आवश्यकता में सबस्ट्रिंग शामिल हैं।जांच करें कि स्ट्रिंग clojure

इसका कारण यह है जावा तार संग्रह नहीं कर रहे हैं काम नहीं करता:

(deftest test_8 
    (testing "get page from sputnik" 
     (let [ 
      band "Isis" 
      page (get-sputnikpage-for-artist band) 
      ] 
      (is (contains? band "Isis")))));does NOT work 

वहाँ एक रास्ता संग्रह में जावा तार कन्वर्ट करने के लिए है? या मैं अन्य तरीकों से प्रक्षेपण अवसरों की जांच कर सकता हूं?

+4

ध्यान रखें कि इसमें शामिल हैं? मूल्यों के अस्तित्व की जांच नहीं करता है, लेकिन कुंजी (मानचित्र) या सूचकांक (वैक्टर और तार) का अस्तित्व। Clojure फ़ंक्शन नामकरण में सबसे आम नुकसान में से एक। दोनों (शामिल? [1 2] 2) और (शामिल? "12" 2) => झूठी है क्योंकि न तो एक सूचकांक 2 (केवल 0 और 1) – NielsK

उत्तर

65

सबसे आसान तरीका है java.lang.String से contains विधि का उपयोग करने के लिए है:

(.contains "The Band Named Isis" "Isis")

=> true

तुम भी नियमित अभिव्यक्ति के साथ ऐसा कर सकते हैं, उदाहरण के लिए

(re-find #"Isis" "The Band Named Isis") 

=> "आइसिस"

(re-find #"Osiris" "The Band Named Isis") 

=> शून्य

आप अपने परिणाम की जरूरत है सही या गलत होने के लिए, आप इसे boolean में लपेट कर सकते हैं:

(boolean (re-find #"Osiris" "The Band Named Isis"))

=> झूठी

5

स्ट्रिंग्स seqable हैं:

(seq "Hello") ;;=> (\H \e \l \l \o) 

... ताकि आप अनुक्रम पुस्तकालय इस्तेमाल कर सकते हैं एक मैच खोजने के लिए:

(defn subsumes [main sub] 
    (some 
    (partial = (seq sub)) 
    (partition (count sub) 1 main))) 

(subsumes "Hello" "ll") ;;=>> true 

... लेकिन यह सरल और बहुत as Diego Basch suggested करने के लिए सबसे तेज़ है ।

+0

@Rovanion आप इस सवाल का जवाब पढ़ने में भूलना है। हम मानते हैं। – Thumbnail

+0

ओह, आप बिल्कुल सही हैं! आपको परेशान करने के लिए माफी चाहता हूं। – Rovanion

35

Clojure 1.8includes? समारोह शुरू की है।

(use '[clojure.string :as s]) 
(s/includes? "abc" "ab") ; true 
(s/includes? "abc" "cd") ; false 
संबंधित मुद्दे