假设我有一个文本,我想定位每个逗号的位置,这个字符串,一个更短的版本,看起来像这样:
string s = "A lot, of text, with commas, here and,there";
理想情况下,我会使用以下内容:
int[] i = s.indexOf(',');
但由于indexOf只返回第一个逗号,我改为:
List<int> list = new List<int>();
for (int i = 0; i < s.Length; i++)
{
if (s[i] == ',')
list.Add(i);
}
有没有一种替代的、更优化的方法来实现这一点?
5条答案
按热度按时间fkvaft9z1#
这里我得到了一个扩展方法,和
IndexOf
的用法一样:所以你可以用
https://dotnetfiddle.net/DZdQ0L
yvt65v4c2#
你可以使用Regex.Matches(string, string)方法。这将返回一个MatchCollection,然后你可以确定Match.Index。MSDN有一个很好的例子,
使用系统;使用系统.文本.正则表达式;
46qrfjad3#
IndexOf also allows you to add another parameter for where to start looking。可以将该参数设置为最后一个已知逗号位置+1。例如:
jrcvhitl4#
你可以使用
IndexOf
方法的重载,它也接受一个起始索引来获取下面的逗号,但是你仍然需要在一个循环中完成,它的执行方式和你的代码几乎一样。您可以使用正则表达式来查找所有逗号,但这会产生相当大的开销,因此并不比您现有的方法更优化。
您可以编写一个LINQ查询来以不同的方式执行此操作,但这也会产生一些开销,因此它不会比您现有的查询更优化。
因此,有许多可供选择的方法,但没有任何一种方法是更优化的。
3duebb1j5#
这有点奇怪,但是为什么不使用split呢?可能比遍历整个字符串更容易