在不使用Regex的情况下,.Net中是否有不区分大小写的字符串替换?

Bri*_*ott 19 .net string replace

我最近不得不在.net中执行一些字符串替换,并发现自己为此目的开发了一个正则表达式替换函数.在开始工作之后,我忍不住想到.Net中必须有一个内置的不区分大小写的替换操作,我不知道了吗?

当有许多其他字符串操作支持不区分大小写的比较时,例如;

var compareStrings  = String.Compare("a", "b", blIgnoreCase);
var equalStrings    = String.Equals("a", "b", StringComparison.CurrentCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

那么必须有一个内置的等效替换?

Tim*_*ter 23

在这里的评论中找到一个:http://www.codeproject.com/Messages/1835929/this-one-is-even-faster-and-more-flexible-modified.aspx

static public string Replace(string original, string pattern, string replacement, StringComparison comparisonType)
{
     return Replace(original, pattern, replacement, comparisonType, -1);
}

static public string Replace(string original, string pattern, string replacement, StringComparison comparisonType, int stringBuilderInitialSize)
{
     if (original == null)
     {
         return null;
     }

     if (String.IsNullOrEmpty(pattern))
     {
         return original;
     }


     int posCurrent = 0;
     int lenPattern = pattern.Length;
     int idxNext = original.IndexOf(pattern, comparisonType);
     StringBuilder result = new StringBuilder(stringBuilderInitialSize < 0 ? Math.Min(4096, original.Length) : stringBuilderInitialSize);

     while (idxNext >= 0)
     {
        result.Append(original, posCurrent, idxNext - posCurrent);
        result.Append(replacement);

        posCurrent = idxNext + lenPattern;

        idxNext = original.IndexOf(pattern, posCurrent, comparisonType);
      }

      result.Append(original, posCurrent, original.Length - posCurrent);

      return result.ToString();
}
Run Code Online (Sandbox Code Playgroud)

应该是最快的,但我还没有检查过.

否则你应该做Simon建议的并使用VisualBasic Replace函数.这是我经常做的,因为它不区分大小写的能力.

string s = "SoftWare";
s = Microsoft.VisualBasic.Strings.Replace(s, "software", "hardware", 1, -1, Constants.vbTextCompare);
Run Code Online (Sandbox Code Playgroud)

您必须添加对Microsoft.VisualBasic dll的引用.

  • @BrianScott:VisualBasic名称空间是.net运行时的一部分,它不仅限于VB.可以从C#(或F#)项目中引用它.它被命名为历史原因,但它没有cooties. (5认同)

Sim*_*ele 15

它并不理想,但您可以导入Microsoft.VisualBasic并使用它Strings.Replace来执行此操作.否则我认为这是自己滚动或坚持使用正则表达式的情况.