2016-04-05 11 views
-1

Ich möchte den Indexwert einer Zeichenfolge in der übergeordneten Zeichenfolge abrufen, aber big_string.IndexOf("small_string") gibt nur den Index der ersten gefundenen Zeichenfolge zurück. Zum Beispiel:Was ist der beste Weg, um alle Indexwerte einer Zeichenfolge in einer Zeichenfolge zu erhalten

string big_string = "sabcdaskdeweusdahsabchdjuasdabc"; 
string small_string = "abc"; 
int position; 

position = big_string.IndexOf(small_string); 

// Output: => 1; 

Es gibt 2 weitere abc in big_string dass IndexOf den Wert nicht zurückgeben kann. Ich kann den Wert nur erhalten, wenn ich eine neue big_string erstellen und ihre erste abc eliminiere, füge die Position in eine Liste hinzu, dann Schleife, bis keine abc übrig sind.

Ich denke, das ist nicht der beste Weg, um alle Index-Wert eines Teilstrings in einer Zeichenfolge zu erhalten. Falls ich die Schleife und den Teilstring nicht verwenden möchte. Wie kann ich das machen?

Gibt es jemanden hier wissen einen besseren Weg, um den Zweck zu erreichen?

+0

http://stackoverflow.com/questions/2641326/finding-all-positions-of-substring-in-a-large-string-in-c-sharp –

Antwort

0

Sie können dies tun, mit einem regulären Expression-

using System; 
using System.Text.RegularExpressions; 

class Program 
{ 

    static void Main() 
    { 
     string big_string = "sabcdaskdeweusdahsabchdjuasdabc"; 
     string small_string = "abc"; 

     foreach (Match m in Regex.Matches(big_string, small_string)) 
     { 
      Console.WriteLine(m.Index); 
     } 

     Console.Read(); 
    } 
} 
0

Eine weitere interessante Lösung:

public static IEnumerable<int> FindIndexes(string text, string query) 
{ 
    return Enumerable.Range(0, text.Length - query.Length) 
     .Where(i => query.Equals(text.Substring(i, query.Length)); 
} 

Von hier aus: C# - Finding All Indices of a Substring

0

Der schnellste Weg wird immer eine Schleife sein, aber Sie müssen nicht Teilstring:

var myString = "myteststring"; 
var search = "s"; 
var indexes = new List<int>(); 
var index = myString.IndexOf(search, 0); 

while (index != -1) 
{ 
    indexes.Add(index); 
    index = myString.IndexOf(search, index + 1); 
} 
Verwandte Themen