★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ )
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10449578.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

类似于C++中的find()函数:比较等于val的范围中第一个元素的迭代器。如果没有元素匹配,则函数最后返回。

返回值是子字符串在父字符串中的位置(下标记录),

如果没有找到,那么会返回一个特别的标记npos(-1)。

返回值可以看成是一个Int型的数。

 1 //String扩展
 2 extension String {
 3     // 截取字符串:从index到结束处
 4     // - Parameter index: 开始索引
 5     // - Returns: 子字符串
 6     func subStringFrom(_ index: Int) -> String {
 7         let theIndex = self.index(self.endIndex, offsetBy: index - self.count)
 8         return String(self[theIndex..<endIndex])
 9     }
10
11     //从0索引处开始查找是否包含指定的字符串,返回Int类型的索引
12     //返回第一次出现的指定子字符串在此字符串中的索引
13     func findFirst(_ sub:String)->Int {
14         var pos = -1
15         if let range = range(of:sub, options: .literal ) {
16             if !range.isEmpty {
17                 pos = self.distance(from:startIndex, to:range.lowerBound)
18             }
19         }
20         return pos
21     }
22
23     //从0索引处开始查找是否包含指定的字符串,返回Int类型的索引
24     //返回最后出现的指定子字符串在此字符串中的索引
25     func findLast(_ sub:String)->Int {
26         var pos = -1
27         if let range = range(of:sub, options: .backwards ) {
28             if !range.isEmpty {
29                 pos = self.distance(from:startIndex, to:range.lowerBound)
30             }
31         }
32         return pos
33     }
34
35     //从指定索引处开始查找是否包含指定的字符串,返回Int类型的索引
36     //返回第一次出现的指定子字符串在此字符串中的索引
37     func findFirst(_ sub:String,_ begin:Int)->Int {
38         var str:String = self.subStringFrom(begin)
39         var pos:Int = str.findFirst(sub)
40         return pos == -1 ? -1 : (pos + begin)
41     }
42
43     //从指定索引处开始查找是否包含指定的字符串,返回Int类型的索引
44     //返回最后出现的指定子字符串在此字符串中的索引
45     func findLast(_ sub:String,_ begin:Int)->Int {
46         var str:String = self.subStringFrom(begin)
47         var pos:Int = str.findLast(sub)
48         return pos == -1 ? -1 : (pos + begin)
49     }
50 }

测试代码:

1 var str:String = "Strengthen"
2 print(str.findFirst("e",4))
3 //Print 8
4 print(str.findLast("e",2))
5 //Print 8
6 print(str.findLast("e",3))
7 //Print 8

转载于:https://www.cnblogs.com/strengthen/p/10449578.html

[Swift]扩展String类:实现find()查找子字符串在父字符串中的位置相关推荐

  1. string类有可以调换方向的函数吗_C++中的string类的用法小结

    相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...

  2. 子div在父div中置底

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. python 判断两个列表间是否具有包含关系以及获取子列表在父列表中的索引

    python 判断两个列表间是否具有包含关系以及获取子列表在父列表中的索引 import operator def get_sub_list_index(parent_list, sub_list): ...

  4. 子盒子在父盒子中水平垂直居中

    子盒子在父盒子中水平垂直居中的几种实现方式. 方式一:margin; HTML: <!-- 以下样式全为此结构 --> <div class="father"&g ...

  5. js代码 父页面调用子页面中的js方法,子页面调用父页面中的js方法

    文中代码亲测可用,转载以示尊重!!! <!--主页面中的JS代码--> <script type="text/javascript"> //调用子页面的方法 ...

  6. 子组件调用父组件中方法的方法

    1.在子组件中用this.$parent.fn()来调用父组件的方法 父组件中: <script>export default {methods: {parentFn() {console ...

  7. vue3.0 子组件调用父组件中的方法

    在vue2中,子组件调用父组件,直接使用this.$emit()即可. 但是在vue3中,很显然使用this.$emit() 已经开始报错了,为什么会报错呢? 原因是:在vue3中setup是在声明周 ...

  8. 子div在父div中上下左右居中

    在父div中使用 align-items: center; 子div使用 text-align: center;

  9. SwiftUI 中为什么应该经常用子视图替换父视图中的大段内容?

    概览 在 SwiftUI 官方教程中,Apple 时常提出"化整为零"的界面布局思想.简单来说,Apple 推荐 SwiftUI 视图的构建方式是:用若干自定义小视图来构成上层的功 ...

最新文章

  1. Mock和Java单元测试中的Mock框架Mockito介绍
  2. unity3d collider自动调整大小_Maya模型在Unity3d中的快速烘焙【2020】
  3. linux用户没有创建文件的权限设置密码,Linux学习第五章用户身份与文件权限
  4. bat脚本实现局域网所有存活IP的精准扫描
  5. Object.keys()返回对象自身可枚举属性组成的数组
  6. Linux 命令(54)—— trap 命令(builtin)
  7. 公司内多个公众号实现账号互通(UnionID机制处理)
  8. 世界完全对称日计算(C++)
  9. 李宏毅机器学习Regression
  10. Django入门文档
  11. 【EDA】Mutisim基于Multisim的带通滤波器仿真设计实验
  12. 谷歌地图高精度模型提取1
  13. outlook配置126邮箱
  14. Test failed due to unrecognized service account for this product, please submit initial report for t
  15. 云上OneNET智慧大棚
  16. 2021年盐城高考成绩查询系统,2021年盐城工学院录取结果查询,附查询网址入口
  17. 计算物体自由下落距离
  18. IDS与IPS工作原理
  19. SAR ADC设计——SAR Logic原理
  20. Android 绘制渐变色

热门文章

  1. 正则表达式过滤文本,replace的使用
  2. ReportViewer教程(10)-给报表分组合计
  3. 深度学习篇-Keras(初级)
  4. 【CCS2018】SDN跨应用中毒攻击
  5. 智能物联网系统安全与防御【会议】
  6. TensorFlow第六步: 继续挖坑 用tf重写BP并增加SGD
  7. MATLAB三维散点图的绘制(scatter3、plot3),同时标明序号
  8. Ubuntu16.04下codeblocks16.01安装,适用于不同的架构
  9. QT 012 [深入] Qt setupUi函数的原理和实现
  10. mysql gtid 主键冲突_数据库开启gtid时,需要注意的问题