2013-10-17 37 views
2

我正在使用此函數來反轉文本,但我有一個小問題的速度。 進行測試我有130,000個字符的文本,大約需要10秒。是否有可能加快速度?這個問題是不是C#不同,因爲它是一個vb.net加速函數反轉字符串

Function ReverseString(ByRef strString As String) As String 
     Dim NextChr, TempString As String, StringLength, Count As Integer, NewString As String = Nothing 

     TempString = strString 
     StringLength = Len(TempString) 
     Do While Count <= StringLength 
      Count = Count + 1 
      NextChr = Mid(TempString, Count, 1) 
      NewString = NextChr & NewString 
     Loop 
     ReverseString = NewString 
End Function 
+0

Linq「Reverse」怎麼辦? – tuespetre

+0

這個問題呢[使用線程反向字符串](http://stackoverflow.com/questions/10573286/reversing-a-string-using-threads)?可以幫助嗎? –

+0

更適合[codereview stackexchange](http://codereview.stackexchange.com/)? – ethorn10

回答

3

試試這個:

Function Reverse(ByVal value As String) As String 
    ' Convert to char array. 
    Dim arr() As Char = value.ToCharArray() 
    ' Use Array.Reverse function. 
    Array.Reverse(arr) 
    ' Construct new string. 
    Return New String(arr) 
    End Function 

來源:dot net perls

+0

謝謝!用vb例子更新! –

+1

作品像一個魅力..完美..謝謝 – XK8ER

+0

恩,爲什麼你不會使用@牧田的答案? –

2
Function ReverseString(ByRef strString As String) As String 
    Dim charArray As Char() = strString.ToCharArray() 
    Array.Reverse(charArray) 
    Dim strReversed As New String(charArray) 
    ReverseString = strReversed 
End Function 
0

我想你的字符串轉換爲字符數組,然後只需調用Array.Reverse

我剛試過這個,它運行在:0.862秒,字符串有26,673,152個字符。當然,我正在一臺極其快速的個人電腦上運行,但仍然存在。

-1

正如在其他的答案說 - 最好是使用特殊的功能是:StrReverse

但是,如果你想擁有自己的功能,你可以用這個,應該是更快:

Function ReverseString(ByRef strString As String) As String 
    Dim builder As New System.Text.StringBuilder(strString.Length) 
    Dim index As Integer = strString.Length - 1 
    While index >= 0 
     builder.Append(strString.Chars(index)) 
     index = index - 1 
    End While 
    ReverseString = builder.ToString 
End Function