收藏swift

Swift中的字符串

2019-10-08  本文已影响0人  下班不写程序
  1. OC中使用NSString定义字符串 -> 是一个 对象.
  2. Swift中用String定义字符串 -> 是一个 结构体.
  3. String比NSString更加轻量级,效率更高.
  4. String 支持直接遍历

1. Swift中的for循环

仿照OC的写法已经废弃(3.0), 在Swift中使用for-in.

    /* for -in 循环分为两种, 是否关心下标
     判断区间解释:
     0..<5  代表  [0, 5)     左闭右开, 大于等于0, 小于5
     0...5  代表  [0, 5]     左闭右闭, 大于等于0, 小于等于5
     */
    func demo(){

        // 1. 关心下标
        for i in 0..<5 {
            print(i)
        }
        
        // 2. 不管心下标 - 使用占位符
        for _ in 0..<5 {
            print("不关系下标")
        }
    }

2. 字符串的遍历和字节长度的计算

    func demo(){

        // 1. 定义一个字符串
        let str = "不想睡,我要陪你一整夜"
        // 2. 打印字符串 -- 结果:不想睡, 我要陪你一整夜
        print(str)
        
        // 3. 遍历
        // 3.1 将字符串 -> 字符, 然后进行遍历
        for c in str.characters {
            /*
             报警告: 'characters' is deprecated: Please use String or Substring directly
             释 义: characters已过期, 请直接使用字符串或者子字符串
             characters :n. 人物, 特征;[计]字符
             */
            print(c)
        }
        
        // 3.2 Swift中字符串s本质是结构体 - 支持直接遍历
        for c in str{
            print(c)
        }
        /* 两种便利的结果都为:
         不
         想
         睡
         ,
         我
         要
         陪
         你
         一
         整
         夜
         */
        
        // 4. 打印字符串的长度 -- 结果:11
        print(str.count)
        
        // 5. 指定编码下的字节长度  汉字 utf-8 是 3 个字节 -- 结果: 31
        let len = str.lengthOfBytes(using: String.Encoding.utf8)
        print(len)
        // 或者直接打印
        print(str.utf8.count)
    }

3.字符串的合并

Swift中 使用”\ ( 常量名或者变量名 )” 完成字符串的快速转换

    func demo(){

        // 字符串合并方式一
        let name = "老王"
        let age = 18
        let result = "我叫" + name + "年龄" + "\(age)"
        print(result)
        
        // 字符串合并方式二
        let result2 = "我叫\(name)年龄\(age)"
        print(result2)
        
        // 输出时间为例, 练习字符串拼接
        // 输出格式: 09:14:34(时间, 不足两位,前一位以0补足)
        let h = 9
        let m = 14
        let s = 34
        /* 方式一
         String(format: <#T##String#>, arguments: <#T##[CVarArg]#>)
         参数一: 格式
         参数二: 数组
         */
        let timeResult = String(format: "%02d:%02d:%02d", arguments: [h, m, s])
        print(timeResult)
        
        /* 方式二
         String(format: <#T##String#>, <#T##arguments: CVarArg...##CVarArg#>)
         参数一: 格式
         参数二: 可变参数
         */
        let timeResult2 = String(format: "%02d:%02d:%02d", h, m, s)
        print(timeResult2)
    }

4.字符串的截取

    func demo(){

        // 定义字符串
        let str = "不想睡,我要陪你一整夜"
        
        // 1. 从头开始截取
        // 1.1 .substring方式, 在3.0废弃了, 并且与to的 哈哈哈 没关系, 只是单纯的计算个数
        let newStr1 = str.substring(to: "哈哈哈".endIndex)
        print(newStr1)   // 结果:不想睡
        
        // 1.2 .prefix方式
        let newStr2 = str.prefix(4)
        print(newStr2)   // 结果:不想睡,
        
        // 1.3 String方法 -- 注意: []里面的截取范围, 不能是证书, 必须是String.Index区间类型
        let newStr3 = String(str[..."哈哈哈".endIndex])
        print(newStr3)   // 结果:不想睡,
        
        // 2. 从结尾往前截取
        // 2.1 .substring方式, 在3.0废弃了
        let newStr4 = str.substring(from: "哈哈哈".endIndex)
        print(newStr4)   // 结果:,我要陪你一整夜
        
        // 2.2 .suffix方式  传入截取的位数, 直接倒数截取
        let newStr5 = str.suffix(3)
        print(newStr5)   // 结果:一整夜
        
        // 2.3 .suffix方式 从什么位置开始截取 注意: 任何str.startIndex都是0!!!
        let newStr6 = str.suffix(from: "哈哈哈".endIndex)
        print(newStr6)   // 结果:,我要陪你一整夜
        
        // 3. 从中间截取 [3~6]
        // 3.1
        let startIndex = "哈哈哈".endIndex
        let endIndex = "哈哈哈呵呵呵".endIndex
        let result = String(str[startIndex...endIndex])
        print(result)   // 结果:,我要陪
        
        // 3.2 offsetBy : 正数,从左往右数; 反之,从右往左
        let startIndex2 = str.index(str.startIndex, offsetBy: 3)
        let endIndex2 = str.index(str.startIndex, offsetBy: 6)
        let result2 = String(str[startIndex2...endIndex2])
        print(result2)   // 结果:,我要陪
        
        /* 3.3 after: 之后/before: 之前
         所以after要少一位, before要多一位
         */
        let startIndex3 = str.index(after: "哈哈".endIndex)
        let endIndex3 = str.index(before: "哈哈哈呵呵呵呵".endIndex)
        let result3 = String(str[startIndex3...endIndex3])
        print(result3)   // 结果:,我要陪
    }

注意: 其实String和NSString可以无缝转换, 当讨厌的时候,可以转换成NSString, 再进行NSString操作, 还有就是一些NSString中的一些方法, 是String中没有的, 所以当需要的时候, 应该适应的进行转换.

    func demo(){
        
        // 定义字符串 
        let str = "不想睡,我要陪你一整夜"
        // 转至 OC 字符串进行后续操作 : 通过 as 转换类型, 后续会详细说明.
        let ocString = (str as NSString).substring(with: NSMakeRange(3, 4))
        print(ocString)     // 结果:,我要陪
    }

最后, 以上内容如有问题, 欢迎指正, 或者有其他的问题, 也欢迎留言讨论~

上一篇下一篇

猜你喜欢

热点阅读