.net如何将stringbuilder与字符串进行比较

时间:2014-08-26 13:40:07

标签: c# vb.net string stringbuilder

在vb.net(或C#)中,我无法弄清楚如何将stringbuilder与字符串进行比较。我搜索了很多,但找不到答案。我不得不写自己的例程。难道没有更好的方法吗?

这不起作用:

Dim s As String = "abc"
Dim sb As New StringBuilder("abc")
If sb.Equals(s) Then
  Console.WriteLine(sb.ToString() + " DOES equal " + s)
Else
  Console.WriteLine(sb.ToString() + " does NOT equal " + s)
End If

该代码的结果是:   abc不等于abc

在没有编写自己的例程的情况下,是否有某种方法可以将字符串构建器与字符串进行比较?由于我无法在任何地方找到这个问题,所以我可能会忽略这一点。

6 个答案:

答案 0 :(得分:4)

最简单的方法是将StringBuilder的内容作为字符串:

If sb.ToString() = s Then ...

如果你想避免创建那个字符串(可能是因为内存使用问题),我担心你必须编写自己的例程来比较它们。基本上是这样的:

Public Shared Function SbEquals(sb As StringBuilder, s As String) As Boolean
  If sb.Length <> s.Length Then Return False
  For i As Integer = 0 to s.Length - 1
    If sb(i) <> s(i) Return False
  Next
  Return True
End Function

答案 1 :(得分:1)

使用

if sb.ToString() = s Then

目前,您要将StringBuilder个实例与string进行比较,而不是它们的值。要获取StringBuilder对象的值,您必须致电ToString,然后将其与string进行比较。

答案 2 :(得分:1)

StringBuilderToString()方法。

在C#中

StringBuilder sb = new StringBuilder("test");
if (sb.ToString() == "test")
{
    // code here
}

答案 3 :(得分:0)

使用正确的字符串比较而不是参考比较。

If String.Compare(sb.ToString(), s, ignoreCase) = 0 Then

您正在比较字符串构建器的内存位置和字符串而不是内容。

答案 4 :(得分:0)

一个简单的c#解决方案(中间路性能)

public static bool EqualStrings(StringBuilder stringBuilder, ref string text)
{
    return stringBuilder.Length == text.Length && stringBuilder.ToString() == text;
}

答案 5 :(得分:-2)

这是我的tostring()测试代码与我自己的例程:

Sub speedTest1()

Dim time As New System.Diagnostics.Stopwatch
time.Start()
Dim i As Integer
Dim sb As New StringBuilder("abc")
Dim s As String = "abc"
For i = 0 To 10000000
  equalsString(sb, s)
Next
time.Stop()
Console.WriteLine(CStr(time.ElapsedMilliseconds) + " MS for my own routine")

time.Start()
For i = 0 To 10000000
  equalsString2(sb, s)
Next
time.Stop()
Console.WriteLine(CStr(time.ElapsedMilliseconds) + " MS for tostring()")

End Sub

Function equalsString(pSB As StringBuilder, pStr As String) As Boolean

If pSB.Length <> pStr.Length Then Return False
For i As Integer = 0 To pStr.Length - 1
  If pSB(i) <> pStr(i) Then
    Return False
  End If
Next
Return True

End Function

Function equalsString2(pSb As StringBuilder, pStr As String) As Boolean

Return (pSb.ToString() = pStr)

End Function

结果是:     527 MS我自己的日常生活     1045 MS for tostring()

我无法让愚蠢的ctrl-k在这里工作,但这就是我如何得到我的结果