使用LINQ解析字符串是否有效?

时间:2011-03-18 00:22:02

标签: vb.net string linq

在过去的几周里,我一直在使用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

两者都有效,第二个更易于阅读,但第一个用于执行对数组和其他枚举的查询。

2 个答案:

答案 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(">", "")