我想在其父字符串中获取字符串的索引值,但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_string
,IndexOf
无法返回该值。
我只能在创建新的big_string
并删除其第一个abc
时获取该值,然后将该位置添加到列表中,然后循环直到没有abc
为止。
我认为这不是获取字符串中子字符串的所有索引值的最佳方法。如果我不想使用循环和子串。我怎么能这样做?
这里有没有人知道更好的方法来达到目的?
答案 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));
}
答案 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);
}