在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
在没有编写自己的例程的情况下,是否有某种方法可以将字符串构建器与字符串进行比较?由于我无法在任何地方找到这个问题,所以我可能会忽略这一点。
答案 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)
StringBuilder
有ToString()
方法。
:
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在这里工作,但这就是我如何得到我的结果