3.3 字符串类型中的常用方法

Swift语言的String类型中封装了许多实用的属性和方法,例如字符串的检查,字符的追加、插入、删除操作,字符数的统计等。熟练使用这些属性与方法能够使得开发者在编程中处理数据时游刃有余。

前边有过介绍,字符串变量的值为空字符串与字符串变量的值为空是两个不同的概念,String类型的实例通过使用isEmpty方法来判断字符串的值是否为空字符串,示例如下:

        //判断字符串是否为空
        var obj1 = ""
        if obj1.isEmpty {
            print("字符串为空字符串")
        }

还有一种方式也可以用来判断一个字符串变量是否为空字符串,即当字符串变量中的字符数量为0时,也可以认定此字符串为空字符串,即通过判断characters集合中元素的个数是否为0,示例如下:

        //获取字符串中字符个数,判断是否为空字符串
        If obj1.characters.count == 0 {
        print("字符串为空字符串")
        }

String类型的实例除了可以使用“+”直接拼接,还可以使用比较运算符,示例代码如下:

        var com1 = "30a"
        var com2 = "31a"
        //比较两个字符串是否相等,只有两个字符串中的所有位置的字符都相等时,才为相等的字符串
        If com1==com2 {
        print("com1和com2相等")
        }
        //比较两个字符串的大小
        if com1<com2 {
        print("com1比com2小")
        }

在比较两个字符串的大小时,会逐个对字符的大小进行比较,直至遇到不相等的字符为止。上面的示例代码可以这样理解:先比较com1字符串与com2字符串的第1个字符,若相等,再比较第2个字符,以此类推。由于com2的第4个字符(2)大于com1的第4个字符(1),因此com2字符串大于com1字符串。

开发者可以通过下标的方式来访问字符串中的每一个字符,获取字符串起始下标与结束下标的方法如下:

        var string = "Hello-Swift"
        //获取字符串起始的下标  0
        var startIndex = string.startIndex
        //获取字符串结束的下标  11
        var endIndex = string.endIndex

这里需要注意,除非为空字符串,否则结束下标的值总会比字符串中最后一个字符的下标值大1,如上示例代码,string字符串中有11个字符,首字符的下标为0,则末字符的下标为10,但是通过endIndex属性获取到的下标值为11,所以也可以理解为,endIndex属性获取到的是字符串中字符的个数。另外,startIndex和endIndex获取到的值为Index类型,并不是整数类型,他们不能直接进行加减运算,需要使用相应的方法进行下标的移动操作,示例如下:

        //获取某个下标后一个下标对应的字符char="e"
        var char = string[string.index(after: startIndex)]
        //获取某个下标前一个下标对应的字符char2 = "t"
        var char2 = string[string.index(before: string.endIndex)]

上面代码中,index(after:)方法用来获取当前下标的后一位下标,index(before:)方法用来获取当前下标的前一位下标。也可以通过传入下标范围的方式来截取字符串中的某个子串,示例如下:

        //通过范围获取字符串中的一个子串Hello
        var subString = string[startIndex...string.index(startIndex, offsetBy: 4)]
        var subString2 = string[string.index(endIndex, offsetBy: -5)..<endIndex]

上面示例代码中“…”为范围运算符,在后面的运算符章节会有详细的介绍,offsetBy参数传入的是下标移动的位数,向其中传入正数则下标向后移动相应位数,传入负数则下标向前移动相应位数。使用这种方式来截取字符串十分方便。String类型中还封装了一些方法,可以帮助开发者便捷地对字符串进行追加、插入、替换、删除等操作,示例如下:

        //获取某个子串在父串中的范围
        var range = string.range(of: "Hello")
        //追加一个字符,此时string = "Hello-Swfit! "
        string.append(Character("! "))
        //追加字符串操作,此时string = "Hello-Swift! Hello-World"
        string.append(" Hello-World")
        //在指定位置插入一个字符,此时string = "Hello-Swift! ~ Hello-World"
        string.insert("~", at: string.index(string.startIndex, offsetBy: 12))
        //在指定位置插入一组字符,此时string = "Hello-Swift! ~~~~ Hello-World"
        string.insert(contentsOf: ["~", "~", "~"], at: string.index(string.startIndex,offsetBy: 12))
        //在指定范围替换一个字符串,此时string = "Hi-Swift! ~~~~ Hello-World"
        string.replaceSubrange(string.startIndex...string.index(string.startIndex,offsetBy: 4), with: "Hi")
        //在指定位置删除一个字符,此时string = "Hi-Swift! ~~~~ Hello-Worl"
        string.remove(at: string.index(before:string.endIndex))
        //删除指定范围的字符,此时string = "Swift! ~~~~ Hello-Worl"
        string.removeSubrange(string.startIndex...string.index(string.startIndex,offsetBy: 2))
        //删除所有字符,此时string = ""
        string.removeAll()

下面方法可以方便地完成字符串的大小写转换:

        var string2 = "My name is Jaki"
        //全部转换为大写
        string2 = string2.uppercased() //结果为 “MY NAME IS JAKI”
        //全部转换为小写
        string2 = string2.lowercased() //结果为 “my name is jaki”

下面方法可以用来检查字符串的前缀和后缀:

        //检查字符串是否有My前缀
        string2.hasPrefix("My")
        //检查字符串是否有jaki后缀
        string2.hasSuffix("jaki")

温馨提示:本节介绍了许多String类型中封装的方法,熟练运用这些方法可以极大地提高开发者的编程效率,本章后面会为读者准备丰富的练习题,尽可能多地实践练习是掌握一门编程语言语法的不二法门。