我是否需要在替换StringBuilder中的字符串之前进行检查(使用“Contains”或“IndexOf”等函数)?C#中是否有IndexOf或Contains方法。这是代码:varsb=newStringBuilder(mystring);sb.Replace("abc","a");字符串dateFormatString=sb.ToString();如果(sb.ToString().Contains("def")){sb.Replace("def","aa");}if(sb.ToString().Contains("ghi")){sb.Replace("ghi","assd");您可能已经注意到我一次又一次地使用ToString()并且我想避免它,因为它每次都会创建新的字符串。你能帮我怎么避免吗?如果StringBuilder不包含“def”,那么进行替换不会造成任何问题,因此只需使用:varsb=newStringBuilder(mystring);sb.Replace("abc","a");sb.Replace("def","aa");sb.Replace("ghi","assd");StringBuilder中没有这样的方法,但您不需要Contains测试。你可以这样写:sb.Replace("abc","a");sb.Replace("def","aa");sb.Replace("ghi","assd");如果在第一个参数中找不到字符串,则替换,对Replace的调用是空操作——这正是您想要的。文件描述:用其他指定字符串替换此实例中所有出现的指定字符串。你阅读本文的方式是,当什么都没有发生时,什么也没有做。您可以编写一个将方法扩展到StringBuilder对象的类。这里我在StringBuilder类中添加了StringOf、Substring等方法。把这个类放在你的项目中。使用系统;使用系统文本;namespaceHelpers{//////将IndexOf、IsStringAt、AreEqual和Substring添加到所有StringBuilder对象。///publicstaticclassStringBuilderExtension{//添加IndexOf、Substring、AreEqual到StringBuilder类。publicstaticintIndexOf(thisStringBuildertheStringBuilder,stringvalue){constintNOT_FOUND=-1;如果(theStringBuilder==null){返回NOT_FOUND;}if(String.IsNullOrEmpty(value)){returnNOT_FOUND;}intcount=theStringBuilder.Length;intlen=value.Length;if(count=loopEnd){returnNOT_FOUND;}for(intloop=startPosition;loop///将一个字符串与另一个字符串的一部分进行比较。/////////寻找针///查看针是否在haystack中的位置///Substring(theStringBuilder,offset,compareString.Length)==compareStringpublicstaticboolIsStringAt(thisStringBuilderhaystack,stringneedle,intposition){if(haystack==null){返回针==无效的;}if(needle==null){returnfalse;}intlen=haystack.Length;intcompareLen=needle.Length;if(len恕我直言,在这种情况下你不必使用StringBuilder...循环中的StringBuilder当使用String对象时更有用,正如Microsoft在本文中所说的那样,它是不可变的。每次你在System.String中使用方法类,会在内存中创建一个新的String对象,需要为这个新对象分配新的空间。在需要对字符串进行重复修改的情况下,创建一个新的String对象相关的开销会很大。如果如果您想在不创建新对象的情况下修改字符串,可以使用System.Text.StringBuilder类。例如,在循环中将多个字符串连接在一起时,使用StringBuilder类可以提高性能所以您可以简单地使用String并避免使用ToString()...StringBuilder中替换字符串前检查(使用“Contains”或“IndexOf”等函数)?所有内容分享,如果对大家有用,需要详细了解C#学习教程,希望大家多多指教多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
