定位指定字符在字符串中第N次出现的位置

阅读: 评论:0

定位指定字符在字符串中第N次出现的位置

定位指定字符在字符串中第N次出现的位置

VBA中的Instr函数可以查找指定字符首次出现的位置,但是有时需要查找的字符第N此出现的位置,VBA并没有提供可以支持这个功能的函数。

实例:查找字符串A123-B1234-C12345-D12345中减号第3次出现的位置。


  • 方法1:
Sub Demo1()msg = "A123-B1234-C12345-D12345"cnt = 0nth_pos = 3For i = 1 To Len(msg)If Mid(msg, i, 1) = "-" Thencnt = cnt + 1If cnt = nth_pos ThenMsgBox "定位位置:" & iExit SubEnd IfEnd IfNext
End Sub

代码解析:
第4行代码指定查找第3次出现的位置。
第5~13行代码循环判断个字符。
第6行判断第N个字符是否为减号。
如果满足条件,第7行代码计数器加一。
第8行代码判断到当前位置,指定字符出现的次数,如果恰好满足定位条件,那么低9行代码输出信息,第10行代码结束代码过程。

逐个判断每个字符是常规思路,但是如果字符串较长,那么耗时也就比较多,


  • 方法2:
Sub Demo2()msg = "A123-B1234-C12345-D12345"nth_pos = 3arr = Split(msg, "-")For i = 0 To nth_pos - 1cnt = cnt + Len(arr(i)) + 1NextMsgBox "定位位置:" & cnt
End Sub

代码解析:
第3行代码指定查找第3次出现的位置。
第4行代码split函数将字符串拆分为数组。
第5~7行代码为For循环,split函数返回值数组的下标下届是从零开始的,因此循环终止值设置为nth_pos-1
第6行代码循环累计数组元素字符个数,最后加一相当于是分隔符。
第8行代码输出信息。

使用split函数拆分为数组之后,可以有效的减少循环次数,提升代码效率。

注意:示例代码中并没有容错机制,如果指定次数超过源字符串中被查找字符出现的次数,那么将产生错误结果。

本文发布于:2024-01-29 15:42:50,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170651417716329.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字符串   字符   位置
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23