zoukankan      html  css  js  c++  java
  • [Swift]扩展String类:实现find()查找子字符串在父字符串中的位置

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(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
  • 相关阅读:
    uniapp版本迭代
    上传图像裁剪功能
    uniapp 复制到剪切板
    uniapp吸顶功能
    地图导航到目的地
    uniapp视频图片上传
    获取昨天今天明天的时间
    【VUE】 前端面试题小结
    vue获取当前时间 实时刷新
    CSS linear-gradient() 函数
  • 原文地址:https://www.cnblogs.com/strengthen/p/10449578.html
Copyright © 2011-2022 走看看