[英]How do I add spaces to a numeric string every 2 numbers in VB.NET?
結論:我使用了一個正則表達式,它在一行代碼中處理任意長度的字符串中的數字和字母。
dim rtn as String = Regex.Replace(input, "..", "$& ")
我想取任意長度的數字字符串,每2個字符插入一個空格。 所以1233456變為12 33 45 6。
有沒有辦法可以將格式用作字符串或IFormatProvider,比如? 這會限制字符串的長度,對吧? 因為我要投入很長時間。
CLng((input)).ToString("## ")
編輯 - 這是原始問題。 我想取任意長度的字符串並每2個字符插入一個空格。 123dssas4rr應該變為12 3d ss為4r r
我笨手笨腳地使用
Dim rtn As String = String.Empty
Dim i As Integer = 0
For Each a In input.ToCharArray
rtn = String.Concat(rtn, a)
i = i + 1
If i Mod 2 = 0 Then
rtn = String.Concat(rtn, " ")
End If
Next
string rtn = Regex.Replace(input, "..(?=.)", "$& ");
或者在VB中
dim rtn as String = Regex.Replace(input, "..(?=.)", "$& ")
您需要導入System.Text.RegularExpressions
(或在Regex
之前添加命名空間名稱)。
如果你願意在替換之后Trim
字符串,那么你可以完全擺脫括號(以及它們內部的東西)。 但是,您需要一個或另一個,因此具有偶數個字符的字符串最后沒有額外的空格。
也許不是最漂亮的,但簡單快速的方法是普通的舊StringBuilder:
Const charNumber = 2
Dim oldString = "123dssas4rr"
Dim sb As New System.Text.StringBuilder()
For i As Integer = 0 To input.Length - 1
If i Mod charNumber = 0 Then
sb.Append(" "c)
End If
sb.Append(input(i))
Next
Dim newString = sb.ToString()
編輯 :
將StringBuilder與Regex方法進行比較僅僅是為了感興趣:
Dim timer As New Stopwatch
Dim regexTime As TimeSpan, stringBuilderTime As TimeSpan
Dim input As String = "123dssas4rr"
Dim result As String
timer.Start()
For i As Int32 = 1 To 10000000
result = Regex.Replace(input, "..(?=.)", "$& ")
Next
timer.Stop()
regexTime = timer.Elapsed
timer.Restart()
Const charNumber = 2
For i As Int32 = 1 To 10000000
Dim sb As New System.Text.StringBuilder()
For chr As Integer = 0 To input.Length - 1
If chr Mod charNumber = 0 Then
sb.Append(" "c)
End If
sb.Append(input(chr))
Next
result = sb.ToString()
Next
timer.Stop()
stringBuilderTime = timer.Elapsed
結果 :
Regex: 00:00:40.8928958
StringBuilder: 00:00:03.3468080
StringBuilder在1000萬次迭代中的速度提高了12倍,即使它在每次迭代時都會創建一個新的StringBuilder對象。 差異將越大,字符串越長。 有時候更短的解決方案並不快,同樣適用於LINQ方法。
即使這個測試實際上並不相關,如果我將其更改為從具有500.000個字符(500kb)的文件中讀取字符串並迭代100次,則StringBuilder的結果更好:
Regex: 00:00:15.8409331
StringBuilder: 00:00:00.8262289
StringBuilder方法快近20倍。
這是一個擴展版本:
Public Module StringExtensions
<Runtime.CompilerServices.Extension()>
Public Function InsertStringRepeatedly(ByVal input As String, ByVal separator As String, ByVal length As Int32) As String
Dim sb As New System.Text.StringBuilder()
For chr As Integer = 0 To input.Length - 1
If chr Mod length = 0 Then
sb.Append(separator)
End If
sb.Append(input(chr))
Next
Return sb.ToString()
End Function
End Module
您可以通過以下方式調用它:
Dim result = input.InsertStringRepeatedly(" ", 2)
我會給你算法和你的代碼,好嗎?
瞧!
你可以做一些簡單的事情
Dim newString AS Char() = oldString.ToCharArray()
For i = 0 To i = oldString.Length - 1
If i Mod 2 = 0 Then Array.Add(newString, " ")
Array.Add(newString, oldString(i))
Next
String.Join(newString, "")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.