2009-04-20 11 views
6

असल में मुझे स्ट्रिंग.इंडेक्सऑफ() करने की आवश्यकता है और मुझे स्रोत स्ट्रिंग से इंडेक्स की सरणी प्राप्त करने की आवश्यकता है।स्रोत स्ट्रिंग से कई इंडेक्स ढूँढना

क्या इंडेक्स की सरणी पाने का कोई आसान तरीका है?

इस प्रश्न पूछने से पहले मैंने बहुत कुछ गुगल किया है, लेकिन इस सरल समस्या को हल करने के लिए आसान समाधान नहीं मिला है।

+0

क्या सबस्ट्रिंग ओवरलैप के उदाहरण हो सकते हैं? – Andy

उत्तर

5
var indexs = "Prashant".MultipleIndex('a'); 

//Extension Method's Class 
    public static class Extensions 
    { 
     static int i = 0; 

     public static int[] MultipleIndex(this string StringValue, char chChar) 
     { 

      var indexs = from rgChar in StringValue 
         where rgChar == chChar && i != StringValue.IndexOf(rgChar, i + 1) 
         select new { Index = StringValue.IndexOf(rgChar, i + 1), Increament = (i = i + StringValue.IndexOf(rgChar)) }; 
      i = 0; 
      return indexs.Select(p => p.Index).ToArray<int>(); 
      } 
    } 
+0

अगर मैं chchhar स्ट्रिंग की आवश्यकता होती है, तो मैं इसे कैसे करूँगा? धन्यवाद। –

+0

मुझे इसकी जांच करने दें .. –

15

कैसे इस विस्तार विधि के बारे में:

public static IEnumerable<int> IndexesOf(this string haystack, string needle) 
{ 
    int lastIndex = 0; 
    while (true) 
    { 
     int index = haystack.IndexOf(needle, lastIndex); 
     if (index == -1) 
     { 
      yield break; 
     } 
     yield return index; 
     lastIndex = index + needle.Length; 
    } 
} 

ध्यान दें कि जब 'एए' 'XAAAY "में की तलाश में इस कोड को अब केवल निकलेगा 1.

तुम सच में एक सरणी की जरूरत है, फोन ToArray() परिणाम पर (। यह .NET 3.5 और इसलिए LINQ समर्थन संभालने जाता है)

+0

क्या आप इसे समायोजित कर सकते हैं, ताकि यह 1 से आगे बढ़ने के बजाय केवल 1 –

+0

लौटाए, सुई की लंबाई से अग्रिम - जॉन के नामकरण का उपयोग करने के लिए :) –

+0

बिल्कुल - लेकिन यह ठीक से काम करने के लिए थोड़ा मुश्किल हो सकता है ऐसा करने के लिए :) मैंने कोड तय कर लिया है। –

6

आप पाश करने के लिए होगा, मुझे लगता है:

 int start = 0; 
     string s = "abcdeafghaji"; 
     int index; 
     while ((index = s.IndexOf('a', start)) >= 0) 
     { 
      Console.WriteLine(index); 
      start = index + 1; 
     } 
2

एक समाधान है कि इस्तेमाल regex और अधिक विश्वसनीय हो सकता है का उपयोग करना, indexOf का उपयोग कर समारोह अविश्वसनीय हो सकता है। यह सभी मैचों और इंडेक्स को मिलेगा, सटीक वाक्यांश से मेल नहीं खाता जो अप्रत्याशित परिणामों का कारण बन सकता है। यह फ़ंक्शन रेगेक्स लाइब्रेरी का उपयोग करके हल करता है।

public static IEnumerable<int> IndexesOf(string haystack, string needle) 
{ 
     Regex r = new Regex("\\b(" + needle + ")\\b"); 
     MatchCollection m = r.Matches(haystack); 

     return from Match o in m select o.Index; 
} 
संबंधित मुद्दे