[英]RegEx vs string manipulation functions: What is better
如果我必須找到一個句子中的單詞,我可以想到兩種方法
在性能或最佳實踐方面哪一個更好
如果在沒有正則表達式的情況下做一些事情相當簡單,那么這種方式幾乎總是更便宜。 String.IndexOf
(或String.Contains
) 絕對是一個例子。
這取決於您的確切要求。 如果你確實需要在一個句子中找到一個單詞 (而不是一個子字符串),那么我相信使用一個名字很好的正則表達式模式可以更簡潔,更明確地表達,而不是使用IndexOf加上所有額外的邏輯來確保你是實際上得到一個完整的單詞。
另一方面,如果您只是在尋找子字符串,那么IndexOf在性能和可讀性方面要優越得多。
這絕不是最科學的測量方法,但這里有一些源代碼表明(在非常具體的約束下)正則表達式比indexof慢大約4倍。
class Program
{
private const string Sentence = "The quick brown fox jumps over the lazy dog";
private const string Word = "jumps";
static void Main(string[] args)
{
var indexTimes = new List<long>();
var regexTimes = new List<long>();
var timer = new Stopwatch();
for (int i = 0; i < 1000; i++)
{
timer.Reset();
timer.Start();
Sentence.IndexOf(Word);
timer.Stop();
indexTimes.Add(timer.ElapsedTicks);
}
Console.WriteLine(indexTimes.Average());
for (int i = 0; i < 1000; i++)
{
timer.Reset();
timer.Start();
Regex.Match(Sentence, Word);
timer.Stop();
regexTimes.Add(timer.ElapsedTicks);
}
Console.WriteLine(regexTimes.Average());
Console.ReadLine();
}
}
就最佳實踐而言,對於閱讀代碼的人來說, string.IndexOf
可能更為明顯。 一旦他們看到正則表達式,人們的大腦往往會關閉,所以像IndexOf
這樣直接的東西會讓他們的大腦保持開放狀態。
至於性能,這取決於很多事情,只能通過特定代碼的基准測試來正確回答。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.