是否多次调用string.Replace()的效率低于对.NET中的Regex方法的单个调用?

Dan*_*ris 5 .net

我想在一个字符串中替换大约8个字符.

使用Regex方法或仅使用多次调用string.Replace()会更有效吗?

我正在替换可能出现的大约7个字符,而不是全部是下划线.字符可以出现在字符串中的任何位置,而不是按特定顺序等.

Jar*_*Par 8

除非您确实需要匹配正则表达式,否则不要使用Regex类.让String类型进行直接文本或字符匹配更有效率,如果这是你所做的全部而不是创建一个正则表达式.

Regex类比简单字符或字符串匹配更强大.这种力量不是免费的.使用完整的正则表达式来匹配字符/字符串是过度的.这相当于使用高功率炸药从你的草坪上取下一只蚂蚁,当你的鞋子做得很好.

  • +1 - 不要用大炮杀死蚊子 - 孔子 (4认同)

LBu*_*kin 8

您不需要多次调用string.Replace() - 它会在一次传递中替换所有出现的事件.请参阅MSDN文档.如果要替换字符串中的不同输入序列,您只需要进行多次调用(这可能是您在问题中暗示的内容).

在这种情况下,我会使用string.Splitstring.Join为此:

var replaced = string.Join( "_", input.Split( new[]{'x','y','z'} ) );
Run Code Online (Sandbox Code Playgroud)

这将在字符'x','y'或'z'之一出现的每个位置拆分字符串(替换为您的集合),并使用'_'字符重新加入片段 - 有效地替换原件.这种方法是不是一定比多次调用更有效string.Replace-这将取决于输入字符串的长度,字符的出现次数的更换次数,等等.您需要使用真实数据进行分析,以确定哪些更快.然而,这种方法的作用是使代码更简洁.

就性能而言 - 我会首先使用最简单,最易读的解决方案,如果测试表明存在问题 - 那么我将介绍并决定采用哪种替代解决方案(如果有的话).除非有充分理由不这样做,否则在编写代码时我的个人优先事项是:

  1. 说得对.
  2. 讲清楚.
  3. 简明扼要.
  4. 快一点.
  5. .. 以该顺序.