2011-02-09 57 views

回答

3

这取决于您的具体要求。如果你真的需要在一个句子中找到单词(不是子字符串),那么我相信可以用一个命名正则表达式比使用IndexOf加上所有额外的逻辑来更加简洁和更明确地表达,以确保你实际上只是一个完整的单词。另一方面,如果您只是在寻找一个子字符串,那么IndexOf在性能和可读性方面远远优于其他字符。

6

如果在没有正则表达式的情况下执行某些操作非常简单,那几乎总是会更便宜。 String.IndexOf(或String.Contains)是,肯定是的一个例子。

1

就最佳实践而言,string.IndexOf对阅读代码的人来说可能更为明显。人们的大脑在看到正则表达式时倾向于关闭,所以像IndexOf这样直截了当的事情会让他们的大脑开放。

至于性能,这取决于很多事情,只能通过基准测试来正确回答。

+0

最佳做法不基于语法的可读性。而正则表达式肯定比常规字符串函数更昂贵。 – 2011-02-09 22:31:29

+0

@Nicklamort那么什么是“最佳实践”? – CanSpice 2011-02-09 22:34:33

3

这绝不是衡量事物最科学的方法,但是这里有一点源代码表明(在非常特定的约束下)正则表达式比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(); 
} 
} 
相关问题