获取字符串中字符串的所有索引值的最佳方法是什么

时间:2016-04-05 01:42:23

标签: c# string

我想在其父字符串中获取字符串的索引值,但big_string.IndexOf("small_string")仅返回它找到的第一个字符串的索引。 例如:

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

position = big_string.IndexOf(small_string);

// Output: => 1;

abc中还有另外两个big_stringIndexOf无法返回该值。 我只能在创建新的big_string并删除其第一个abc时获取该值,然后将该位置添加到列表中,然后循环直到没有abc为止。

我认为这不是获取字符串中子字符串的所有索引值的最佳方法。如果我不想使用循环和子串。我怎么能这样做?

这里有没有人知道更好的方法来达到目的?

4 个答案:

答案 0 :(得分:0)

您可以使用正则表达式。匹配对象将包含所有捕获,每个捕获都有索引 https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.capture(v=vs.110).aspx

答案 1 :(得分:0)

您可以使用正则表达式执行此操作 -

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();
    }
}

答案 2 :(得分:0)

另一个有趣的解决方案:

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));
}

从这里开始:C# - Finding All Indices of a Substring

答案 3 :(得分:0)

最快的方法永远是循环,但你不需要子串:

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);
}