常规思路是用循环加判断,但是这样效率不高。
我们可以借助于正则表达式引擎来实现,参考代码如下:
Sub Test()
Const STR_TEST As String = "we are studying VB 课程!"
MsgBox "小写字母数: " & CStr(Counter(STR_TEST, "[a-z]")) & vbNewLine & _
"大写字母数: " & CStr(Counter(STR_TEST, "[A-Z]")) & vbNewLine & _
"其他字符数: " & CStr(Counter(STR_TEST, "[^a-zA-Z]"))
End Sub
' 使用正则表达式对源字符串计数.
Public Function Counter(ByVal Source As String, _
ByVal Pattern As String) As Long
Dim objRegExp As Object
On Error Resume Next
Set objRegExp = CreateObject("VBScript.RegExp")
If Not (objRegExp Is Nothing) Then
With objRegExp
.Global = True
.Multiline = True
.IgnoreCase = False
.Pattern = Pattern
Counter = Len(Source) - Len(.Replace(Source, vbNullString))
End With
Set objRegExp = Nothing
End If
End Function
运行结果:
用len
这个代码就行了