只是为了好玩,下面是一个更有效的函数版本,它在上面粘贴的网络上进行循环作为答案。
样本测试结果(10,000 个字符字符串的 100 个循环)。时间是每次调用的毫秒数,从 QueryPerformanceTimer 中获取。
旧:最小值:57.6 毫秒,平均值:65.4 毫秒
新:最小值:22.1 毫秒,平均值:24.4 毫秒
性能改进来自于在每次替换时不创建字符串的新副本,而是使用 Mid$ 语句就地替换字符。
Public Function StripAccent(ByVal txt As String) As String
Dim i As Long, j As Long, n As Long
Const c1 = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ"
Const c2 = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy"
n = Len(c1)
For i = 1 To n
j = 0
Do
j = InStr(j + 1, txt, Mid$(c1, i, 1), vbBinaryCompare)
If j > 0 Then Mid$(txt, j, 1) = Mid$(c2, i, 1) Else Exit Do
Loop
Next
StripAccent = txt
End Function