我有一个函数正在遍历字符串以查找模式并更改其中的部分。我可以通过插入优化它
if (!text.Contains(pattern)) return;
但是,我实际上是在遍历整个字符串并将其中的一部分与模式进行比较,所以问题是,String.Contains()
实际上是如何工作的?我知道有这样一个问题 - String.Contains 是如何工作的?但答案相当不清楚。因此,如果String.Contains()
也遍历整个字符数组并将它们与我正在寻找的模式进行比较,它不会真正使我的函数更快,而是更慢。
那么,尝试这样的优化是个好主意吗?而且 - 是否有可能String.Contains()
比仅遍历整个数组并将每个字符与某个常量进行比较的函数更快?
这是代码:
public static char colorchar = (char)3;
public static Client.RichTBox.ContentText color(string text, Client.RichTBox SBAB)
{
if (text.Contains(colorchar.ToString()))
{
int color = 0;
bool closed = false;
int position = 0;
while (text.Length > position)
{
if (text[position] == colorchar)
{
if (closed)
{
text = text.Substring(position, text.Length - position);
Client.RichTBox.ContentText Link = new Client.RichTBox.ContentText(ProtocolIrc.decode_text(text), SBAB, Configuration.CurrentSkin.mrcl[color]);
return Link;
}
if (!closed)
{
if (!int.TryParse(text[position + 1].ToString() + text[position + 2].ToString(), out color))
{
if (!int.TryParse(text[position + 1].ToString(), out color))
{
color = 0;
}
}
if (color > 9)
{
text = text.Remove(position, 3);
}
else
{
text = text.Remove(position, 2);
}
closed = true;
if (color < 16)
{
text = text.Substring(position);
break;
}
}
}
position++;
}
}
return null;
}