在过去的几周里,我一直在使用LINQ,当我必须编写一行函数来删除<和>从一个字符串,我发现我把它写成LINQ查询:
Public Function StripLTGT(text As String) As String
Return String.Join("", (From i As Char In text.ToCharArray Where i <> "<"c Where i <> ">"c).ToArray)
End Function
我的问题是,如上所述使用LINQ或使用StringBuilder这样做是否更好,如下所示:
Public Function StripLTGT(text As String) As String
Dim a As New StringBuilder(text)
a = a.Replace("<", "")
a = a.Replace(">", "")
Return a.ToString
End Function
两者都有效,第二个更易于阅读,但第一个用于执行对数组和其他枚举的查询。
答案 0 :(得分:2)
Regex.Replace("[<>]", "")
更直截了当。
或者:
myString = myString.Replace("<", "").Replace(">", "")
选项A,B或C是否比其他选项更快很难说,因为选项A在小字符串上可能更好,而选项B在长字符串上可能更好等等。
答案 1 :(得分:1)
任何一方在功能方面都应该没问题。第一个是不有效。 ToArray
调用正在进行远更多的工作(如果你使用的是.NET 4.0,不需要它),并且不需要ToCharArray
调用。基本上,输入字符串中的字符迭代的次数比它们需要的要多得多,并且多余的数组被多余地分配。
我不会说这特别重要;但是你问了效率,这就是我提到它的原因。
第二个对我来说似乎很好。请注意,如果您想要使用单行路由,您仍然可以使用StringBuilder
并且我认为仍然比LINQ版本更简洁(尽管我没有数字字符)。不过,这是否优于更直接的String.Replace
选项对我来说还不清楚:
' StringBuilder.Replace version:
Return New StringBuilder(text).Replace("<", "").Replace(">", "").ToString()
' String.Replace version:
Return text.Replace("<", "").Replace(">", "")