【发布时间】:2011-12-21 12:20:01
【问题描述】:
好吧,我做了研究,看到了很多关于这个的帖子,但在 VB6 中找不到解决方案 那么我该如何在 VB6 中做到这一点?
假设我得到了一个类似的字符串:
“从前,有一个小孩想知道离家比1000更远...”
我只想得到 numbers "1000" 在这个字符串中与字符串分离,并想替换整个字符串,但数字应该保持不变。
【问题讨论】:
好吧,我做了研究,看到了很多关于这个的帖子,但在 VB6 中找不到解决方案 那么我该如何在 VB6 中做到这一点?
假设我得到了一个类似的字符串:
“从前,有一个小孩想知道离家比1000更远...”
我只想得到 numbers "1000" 在这个字符串中与字符串分离,并想替换整个字符串,但数字应该保持不变。
【问题讨论】:
最简单的方法是遍历字符串并将数字复制到一个新的:
Function GetNumbers(Value As String) As String
Dim Index As Long
Dim Final As String
For Index = 1 To Len(Value)
If Mid(Value, Index, 1) Like "[0-9]" Then
Final = Final & Mid(Value, Index, 1)
End If
Next
GetNumbers = Final
End Function
结果:
?GetNumbers("abc12def345")
12345
但是,当有很多数字时,这对于长字符串来说效率很低。
【讨论】:
Function GetNumbers(val As String) As String Return CType(val.Where(Function(c) Char.IsDigit(c)).ToArray(), String) End Function
以迪安娜的回答为基础:
Function GetNumbers(Value As String) As String
Dim Index As Long
Dim Digit As String
Dim Final As String
Dim Count As Long
Count = 1
GetNumbers = Space(Len(Value))
For Index = 1 To Len(Value)
Digit = Mid(Value, Index, 1)
If Digit Like "[0-9]" Then
Mid(GetNumbers, Count, 1) = Digit
Count = Count + 1
End If
Next
GetNumbers = Left(GetNumbers, Count - 1)
End Function
这个函数应该是O(n)
?GetNumbers("abc12def345")
12345
【讨论】:
你可以使用正则表达式:
Dim NumExp As New RegExp
NumExp.Pattern = "\D"
NumExp.Global = True
strOutput = NumExp.Replace(strWhatToReplace, strReplaceWithWhat)
【讨论】:
nStr = "abc12def345"
For X = 1 To Len(nStr)
If IsNumeric(Mid(nStr, X, 1)) = True Then
nNum = nNum & Mid(nStr, X, 1)
End If
Next X
MsgBox nNum
【讨论】: