美文网首页
swift 字符串和字符

swift 字符串和字符

作者: 皆为序幕_ | 来源:发表于2018-11-13 17:37 被阅读0次

    Swift 的String类型是值类型。 如果您创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。 任何情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值操作

    初始化空字符串

    var emptyString = ""               // 空字符串字面量
    let someString = "这是一个字符串"  //字符串字面量
    var anotherEmptyString = String()  // 初始化方法
    let str = String(format: "%d--%d", 1,100)  // 初始化方法
    
    //Character的数组初始化字符串
    let catCharacters: [Character] = ["d", "o", "g"]
    let catString = String(catCharacters)
    
    • 通过检查其Bool类型的isEmpty属性来判断该字符串是否为空
    if emptyString.isEmpty {
        print("空空如也")
    }
    
    • 多行字符串字面量(由一对三个双引号包裹着的具有固定顺序的文本字符集)
    let quotation = """
    如果说冬天的北京出奇的冷
    
    那我让你感受下冬天的杭州
    """
    

    可变字符串(var)

    var message = "产品经理"
    message += "要怎样?"  //产品经理要怎样?
    

    计算字符串长度

    var string = "产品经理要怎样"
    print(string.count)    // 7
    

    字符串遍历

    使用 indices 属性会创建一个包含全部索引的范围(Range),用来在一个字符串中访问单个字符。
    let someString = "dog"
    for index in someString.indices {
        print(someString[index])
    }
    // d
    // o
    // g
    
    
    for character in "dog" {
        print(character)
    }
    // d
    // o
    // g
    

    字符串拼接

    let message = "产品经理"
    let result = "\(message)要怎样?"  //产品经理要怎样?
    
    let string1 = "产品经理"
    let string2 = "要怎样?"
    var message = string1 + string2 //产品经理要怎样?
    
    var message = "产品经理"
    message += "要怎样?"  //产品经理要怎样?
    
    let mark: Character = "?"
    var string = "产品经理要怎样"
    string.append(mark)  //产品经理要怎样?
    

    字符串的索引

    • startIndex是获取字符创中的第一个字符的索引
    • endIndex是字符串中最后一个字符的后一个字符的索引(endIndex是字符串索引种的非法下标,超出了字符串的范围)
    • index(before:)得到前面的一个索引
    • index(after:)得到后面的一个索引
    • index(_:offsetBy:)获取对应偏移量的索引
    let someString = "developer"
    print(someString[someString.startIndex])    //r
    print(someString[someString.index(before: someString.endIndex)])    //e
    print(someString[someString.index(after: someString.startIndex)])   //o
    let index = someString.index(someString.startIndex, offsetBy: 5)
    print(someString[index])    //d
    

    字符串的插入

    insert(_:at:)可以将单个字符插入到指定索引处的字符串中

    var someString = "developer"
    someString.insert("!", at: someString.endIndex)
    // someString = developer!
    

    insert(contentsOf:at:)指定索引处插入另一个字符串的内容

    var someString = "developer"
    someString.insert(contentsOf: "are great", at: someString.endIndex)
    // someString = developer are great
    

    字符串的删除

    remove(at:)要从指定索引处的字符串中删除单个字符

    var someString = "developer!"
    someString.remove(at:someString.index(before: someString.endIndex))
    // someString = developer
    

    removeSubrange(_:)可以在一个字符串的指定索引删除一个子字符串

    let range = someString.index(someString.endIndex, offsetBy: -10) ..< someString.endIndex
    someString.removeSubrange(range)
    // someString = developer
    

    字符串替换

    let str = "aa$$bb$$cc$$dd"
    let str2 = str.replacingOccurrences(of: "$$", with: "**")  
    //aa**bb**cc**dd
    

    字符串截取

    Swift 里的 SubString 绝大部分函数都跟 String 一样,意味着你可以使用同样的方式去操作 SubString 和 String。然而,String 和 SubString 的区别在于性能优化上,SubString 可以重用原 String 的内存空间,或者另一个 SubString 的内存空间(String 也有同样的优化,但如果两个 String 共享内存的话,它们就会相等)。这一优化意味着你在修改 String 和 SubString 之前都不需要消耗性能去复制内存。 因为它重用了原 String 的内存空间,原 String 的内存空间必须保留直到它的 SubString 不再被使用为止你只有在短时间内需要操作字符串时,才会使用 SubString。当你需要长时间保存结果时,就把 SubString 转化为 String 的实例


    png
    let str = "developer"
    let index = str.index(of: "v") ?? str.endIndex
    let sub = str[...index]    //dev
    let sub1 = str[index ..< str.endIndex]    //veloper
    let sub2 = str[str.startIndex ..< index]  //de
    
    // 把结果转化为 String 以便长期存储
    let newString = String(sub)
    
    //str 是一个 String,意味着它在内存里有一片空间保存字符集。而由于 sub 是  str 的 SubString,它重用了 str 的内存空间。相反,newString 是一个 String —— 它是使用 SubString 创建的,拥有一片自己的内存空间
    

    比较字符串(字符串字符相等、前缀相等和后缀相等)

    • 字符串/字符相等
    let str1 = "develop are great"
    let str2 = "develop are great"
    if str1 == str2 {
       print("These two strings are considered equal")
    }
    
    • 前缀/后缀相等
      通过调用字符串的hasPrefix(:)/hasSuffix(:)方法来检查字符串是否拥有特定前缀/后缀,两个方法均接收一个String类型的参数,并返回一个布尔值。
    let romeoAndJuliet = [
        "Act 1 Scene 1: Verona, A public place",
        "Act 1 Scene 2: Capulet's mansion",
        "Act 1 Scene 3: A room in Capulet's mansion",
        "Act 2 Scene 1: Outside Capulet's mansion",
        "Act 2 Scene 2: Capulet's orchard",
        "Act 2 Scene 3: Outside Friar Lawrence's cell"
    ]
    var act1SceneCount = 0
    for scene in romeoAndJuliet {
        if scene.hasPrefix("Act 1 ") {
            act1SceneCount += 1
        }
    }
    print("There are \(act1SceneCount) scenes in Act 1")
    //There are 3 scenes in Act 1
    
    var mansionCount = 0
    var cellCount = 0
    for scene in romeoAndJuliet {
        if scene.hasSuffix("Capulet's mansion") {
            mansionCount += 1
        } else if scene.hasSuffix("Friar Lawrence's cell") {
            cellCount += 1
        }
    }
    print("\(mansionCount) mansion scenes; \(cellCount) cell scenes")
    //3 mansion scenes; 1 cell scenes
    

    字面量中的特殊字符

    • \0(空字符)\(反斜线)\t(水平制表符)\n(换行符)\r(回车符)"(双引号)'(单引号)
    • Unicode 标量,写成\u{n}(u为小写),其中n为任意一到八位十六进制数且可用的 Unicode 位码。
    let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
    // "Imagination is more important than knowledge" - Einstein
    let dollarSign = "\u{24}"        // $,  Unicode scalar U+0024
    let blackHeart = "\u{2665}"      // ♥,  Unicode scalar U+2665
    let sparklingHeart = "\u{1F496}" // 💖, Unicode scalar U+1F496
    

    相关文章

      网友评论

          本文标题:swift 字符串和字符

          本文链接:https://www.haomeiwen.com/subject/lhucfqtx.html