• Swift3.0语言教程查找字符集和子字符串


    Swift3.0语言教程查找字符集和子字符串

    Swift3.0语言教程查找字符集和子字符串,在字符串中当字符内容很多时,我们就需要使用到查找字符集或者子字符串的方法。以下我们将讲解3种查找字符集和子字符串的方法,判断字符串中是否包含某个给定字符串、搜索字符集或者子字符串和枚举字符串。

    1.判断字符串中是否包含某个给定字符串

    NSString提供了3种方法用于判断字符串是否包含其他字符串。它们分别为contains(_:)、localizedCaseInsensitiveContains(_:)和localizedStandardContains(_:)方法。

    (1)contains(_:)方法用来判断字符串A是否包含aString字符串,其语法形式如下:

    func contains(_ str: String) -> Bool

    其中,str用来指定一个字符串。

    【示例1-40】以下将判断在字符串a中是否包含"Hello"、"ello"和"eo"字符串。

    import Foundation

    var  a=NSString(string:"Hello,World")

    //判断在字符串a中是否包含"Hello"字符串

    if(a.contains("Hello")){

        print("a字符串中包含Hello字符串")

    }else{

        print("a字符串中不包含Hello字符串")

    }

    //判断在字符串a中是否包含"ello"字符串

    if(a.contains("ello")){

        print("a字符串中包含ello字符串")

    }else{

        print("a字符串中不包含ello字符串")

    }

    //判断在字符串a中是否包含"eo"字符串

    if(a.contains("eo")){

        print("a字符串中包含eo字符串")

    }else{

        print("a字符串中不包含eo字符串")

    }

    运行结果如下:

    a字符串中包含Hello字符串

    a字符串中包含ello字符串

    a字符串中不包含eo字符串

    (2)localizedCaseInsensitiveContains(_:)方法的功能是判断字符串A是否包含字符串B,不区分大小写,其语法形式如下:

    func localizedCaseInsensitiveContains(_ str: String) -> Bool

    其中,str用来指定一个字符串。

    【示例1-41】以下将判断在字符串a中是否包含"hello"、"ello"和"eo"字符串。

    import Foundation

    var  a=NSString(string:"Hello,World")

    //判断在字符串a中是否包含"Hello"字符串

    if(a.localizedCaseInsensitiveContains("hello")){

        print("a字符串中包含hello字符串")

    }else{

        print("a字符串中不包含hello字符串")

    }

    //判断在字符串a中是否包含"ello"字符串

    if(a.localizedCaseInsensitiveContains("ello")){

        print("a字符串中包含ello字符串")

    }else{

        print("a字符串中不包含ello字符串")

    }

    //判断在字符串a中是否包含"eo"字符串

    if(a.localizedCaseInsensitiveContains("eo")){

        print("a字符串中包含eo字符串")

    }else{

        print("a字符串中不包含eo字符串")

    }

    运行结果如下:

    a字符串中包含hello字符串

    a字符串中包含ello字符串

    a字符串中不包含eo字符串

    (3)localizedStandardContains(_:)方法可以用来判断本地化的字符串A是否包含字符串B,其语法形式如下:

    func localizedStandardContains(_ str: String) -> Bool

    其中,str用来指定一个字符串。

    【示例1-42】以下将判断在字符串a中是否包含"He"字符串。

    import Foundation

    var  a=NSString(string:"Hello,World")

    if(a.localizedStandardContains("He")){

        print("a字符串中包含He字符串")

    }else{

        print("a字符串中不包含He字符串")

    }

    运行结果如下:

    a字符串中包含He字符串

    2.搜索字符集或者子字符串

    在上文中判断字符串中是否包含某个给定字符串其实就是对字符串的一种搜索,它返回的是一个Bool值。为了让搜索更为详细,我们将使用下面的内容实现,也就是搜索字符集或者子字符串。

    (1)搜索字符集

    在字符串中如果我们需要搜索指定字符集(字符集表示一个字符),需要使用到NSString中的3个方法,分别为:rangeOfCharacter(from:)、rangeOfCharacter(from:options:)和rangeOfCharacter(from:options:range:)方法。

    rangeOfCharacter(from:)方法实现的功能是搜索指定的字符集,其语法形式如下:

    func rangeOfCharacter(from searchSet: CharacterSet) -> NSRange

    其中,searchSet用来指定字符集。

    【示例1-43】以下将在字符串中搜索字符集c,并输出字符集c的第一个位置。

    import Foundation

    var a=NSString(string:"Hello,World")

    var c:CharacterSet=NSCharacterSet(charactersIn:"W") as CharacterSet

    print(a.rangeOfCharacter(from: c).location)                                        //搜索字符集

    运行结果如下:

    6

    rangeOfCharacter(from:options:)方法和rangeOfCharacter(from:)方法的功能类似,但是它比rangeOfCharacter(from:)方法多了一个mask参数,该参数可以用来指定一个选项标记(这个标记可以作为搜索的条件)。其语法形式如下:

    func rangeOfCharacter(from searchSet: CharacterSet, options mask: NSString.CompareOptions = []) -> NSRange

    【示例1-44】以下将使用rangeOfCharacter(from:options:)方法对指定字符集进行搜索,并输出字符集的第一个位置。

    import Foundation

    var a=NSString(string:"Hello,World")

    var c:CharacterSet=NSCharacterSet(charactersIn:"r") as CharacterSet

    print(a.rangeOfCharacter(from: c, options: NSString.CompareOptions.caseInsensitive).location)

    运行结果如下:

    8

    rangeOfCharacter(from:options:range:)方法和rangeOfCharacter(from:options:)方法的功能类似,但是它比rangeOfCharacter(from:options:)方法多了一个rangeOfReceiverToSearch参数,该参数可以设置搜索的范围。其语法形式如下:

    func rangeOfCharacter(from searchSet: CharacterSet, options mask: NSString.CompareOptions = [], range rangeOfReceiverToSearch: NSRange) -> NSRange

    【示例1-45】以下将使用rangeOfCharacter(from:options:range:)方法对指定字符集进行搜索,并输出字符集的第一个位置。

    import Foundation

    var a=NSString(string:"Hello,World")

    var c:CharacterSet=NSCharacterSet(charactersIn:"r") as CharacterSet

    print(a.rangeOfCharacter(from: c, options: NSString.CompareOptions.caseInsensitive, range: NSMakeRange(3, 7)).location)                                                                           //搜索字符集

    print(a.rangeOfCharacter(from: c, options: NSString.CompareOptions.caseInsensitive, range: NSMakeRange(0, 3)).location)                                                                           //搜索字符集

    运行结果如下:

    8

    9223372036854775807

    (2)搜索字符串

    在字符串中如果我们需要搜索指定子字符串,需要使用到NSString中的5个方法,分别为:localizedStandardRange(of:)、range(of:)、range(of:options:)、range(of:options:range:)和range(of:options:range:locale:)方法。其中,localizedStandardRange(of:)方法是在本地化的字符串A中搜索子字符串,其语法形式如下:

    func localizedStandardRange(of str: String) -> NSRange

    其中,str用来指定一个子字符串。

    【示例1-46】以下将搜索子字符串,并输出子字符串的第一个位置。

    import Foundation

    var a=NSString(string:"Hello,World")

    //搜索子字符串

    print(a.localizedStandardRange(of: "lo").location)

    print(a.localizedStandardRange(of: "H").location)

    print(a.localizedStandardRange(of: "B").location)

    运行结果如下:

    3

    0

    9223372036854775807

    range(of:)方法的功能是对子字符串进行搜索。其语法形式如下:

    func range(of searchString: String) -> NSRange

    其中,searchString用来指定一个子字符串。

    【示例1-47】以下将搜索子字符串,并输出子字符串的第一个位置。

    import Foundation

    var a=NSString(string:"Hello,World")

    print(a.range(of: "World").location)                                     //搜索子字符串

    运行结果如下:

    6

    range(of:options:)方法和range(of:)方法的功能类似,但是它比range(of:)方法多了一个mask参数,该参数可以用来指定一个选项标记(这个标记可以作为搜索的条件)。其语法形式如下:

    func range(of searchString: String, options mask: NSString.CompareOptions = []) -> NSRange

    【示例1-48】以下将搜索子字符串,并输出子字符串的第一个位置。

    import Foundation

    var a=NSString(string:"Hello,World")

    print(a.range(of: "LD", options: NSString.CompareOptions.caseInsensitive).location)        //搜索子字符串

    运行结果如下:

    9

    range(of:options:range:)方法和range(of:options:)方法的功能类似,但是它比range(of:options:)方法多了一个rangeOfReceiverToSearch参数,该参数可以设置搜索的范围。其语法形式如下:

    func range(of searchString: String, options mask: NSString.CompareOptions = [], range rangeOfReceiverToSearch: NSRange) -> NSRange

    【示例1-49】以下将搜索子字符串,并输出子字符串的第一个位置。

    import Foundation

    var a=NSString(string:"Hello,World")

    print(a.range(of: "LL", options: NSString.CompareOptions.caseInsensitive, range: NSMakeRange(0, 7)).location)

    运行结果如下:

    2

    range(of:options:range:locale:)方法和range(of:options:range:)方法的功能类似,但是它比range(of:options:range:)方法多了一个locale参数,该参数可以语言环境。其语法形式如下:

    func range(of searchString: String, options mask: NSString.CompareOptions = [], range rangeOfReceiverToSearch: NSRange, locale: Locale?) -> NSRange

    【示例1-50】以下将搜索子字符串,并输出子字符串的第一个位置。

    import Foundation

    var a=NSString(string:"Hello,World")

    var l=Locale.current

    print(a.range(of: "O,", options: NSString.CompareOptions.caseInsensitive, range: NSMakeRange(0, 7), locale: l).location)

    运行结果如下:

    4

    3.枚举字符串

    在字符串中,如果我们想要遍历输出字符或者子字符串可以使用循环,当然,也可以使用NSString中提供的两个方法,一个是enumerateLines(_:)方法,另一个是enumerateSubstrings(in:options:using:)方法。

    (1)enumerateLines(_:)方法可以枚举出字符串中所有的行,其语法形式如下:

    func enumerateLines(_ block: (String, UnsafeMutablePointer<ObjCBool>) -> Void)

    其中,block用来指定枚举执行的块函数。

    【示例1-51】以下将使用enumerateLines(_:)方法枚举出字符串a中的所有行。

    import Foundation

    var a=NSString(string:"Hello World Swift iOS Xcode Mac")

    //枚举

    a.enumerateLines({

        (str:String,obj:UnsafeMutablePointer<ObjCBool>) in

        print(str)

    })

    运行结果如下:

    Hello

    World

    Swift

    iOS

    Xcode

    Mac

    (2)enumerateSubstrings(in:options:using:)方法的功能是在字符串的指定范围内,枚举子字符串,其语法形式如下:

    func enumerateSubstrings(in range: NSRange, options opts: NSString.EnumerationOptions = [], using block: (String?, NSRange, NSRange, UnsafeMutablePointer<ObjCBool>) -> Void)

    其中,range用来指定范围,opts是一个枚举选项,用来指定子字符串和枚举风格的类型,block用来指定枚举执行的块函数。

    【示例1-52】以下将使用enumerateSubstrings(in:options:using:)方法将枚举字符串中的子字符串。

    import Foundation

    var a=NSString(string:"The hard part isn’t making the decision. It’s living with it.")

    //枚举

    a.enumerateSubstrings(in: NSMakeRange(0, a.length), options: NSString.EnumerationOptions.byWords, using: {

        (substring:String?, substringRage:NSRange, enclosingRange:NSRange, obj:UnsafeMutablePointer<ObjCBool>) in

        print(substring!)

    })

    运行结果如下:

    The

    hard

    part

    isn’t

    making

    the

    decision

    It’s

    living

    with

    it

    Swift3.0语言教程查找字符集和子字符串

    相关阅读:Swift3.0语言教程比较、判断字符串

  • 相关阅读:
    高可用架构案例一
    小程序页面可以放置转发按钮,同时开放了微信运动步数背景音乐播放等更多基础能力
    [今日干货]微博如何才能快速增粉?
    [今日干货]短视频获得种子用户的途径
    【今日干货】分享个微信解绑手机号的方法
    群用户通过微信小程序可以更好地协作了
    微信小程序首支视频广告片发布
    微信公众号可快速创建“门店小程序” 不用开发
    公众号和小程序可以同名了 名称支持同主体复用
    公众号群发文章支持添加小程序
  • 原文地址:https://www.cnblogs.com/daxueba-ITdaren/p/6054039.html
Copyright © 2020-2023  润新知