Swift 4.0学习之旅—字符串和字符

 //在swift中 String 可以调用OC中的 NSString方法 不用进行转换
        //字符串的字面量 可以用于为常量和变量提供初始值
        let str = "hello world"
        
        //多行字符串字面量 与oc /**/注释相似
        let string = """
                    a
                    b
                    c
                    d
                    e
                    """
        print(string)
        
        //上面代码中 换行已经包含在内 如果不想这么写还想要有换行 用\n来代替 与oc一样
        let hh = "hello \n world"
        print( hh)
        
        //在多行中不希望有多行样式 在""" 字符串中 每行字符串尾部用\ 来当做续行 不是换行 """
        //这样方便可读性
        //但是""" 符号必须独占一行才行
        let hello = """
        hello world duo hang \
        i love the world
        """
        
        //在多行中 以末尾"""符号位置为基准 若各行有字符创超出了末尾 """ 则超出的部分包含在字符串中
        print("""
        123
         456
          789
        """)
        //超出某位的"""第一个“符号 都作为空格来处理
        
//        print("""
//    123
//        456
//        789
//        """)
//这么写或报错 说是以下各行缩进不足 所以 所有的字符串换行后 都不能超过某位的”“”位置
        
        //转义字符
//  \0 空字符 \\反斜线 \t水平制表符 \n换行符 \r回车符 \"双引号 \'单引号
        
        //Unicode标量 写成\u{n} u为小写,n为任意一到八位十六进制数切可用的unicode编码
        
        print("\"注释 \"")
        print("\u{24}")
        print("\u{2665}")
        print("\u{1F496}")
        
        //若在多行字符串中使用""" 必须要用一个\符号来转义
        print("""
        Escaping the first quote \"""
        Escaping all three quotes \"\"\"
        """)
        
        //初始化一个空字符串
        var nilStr = ""
        var emptyStr = String()
        //以上两个字符串为空 且等价
        
        //判断字符串是否为空
        if nilStr.isEmpty{
            print("empty str")
        }
        
        //字符串可变性 var为变量
        var variablestr = "hello"
        variablestr += " world"
        
        let str1 = "hello"
//        str1 += "world"//此时报错 因为str1定义为常量
        
        //for in 语句来循环输出 字符串中没每个字符
        
        for 字符 in "hello world"{
            print(字符)
        }
        
        //可以通过 character 来定义 并进行字符字面量赋值,可以作为一个独立的字符量或变量
        let worldI : Character = "i"

        //可以把一个字符集合 通过String来初始化成一个字符串
        let chars : [Character] = ["a","b",worldI]
        let charStr = String(chars)
        print(charStr)
        
        //使用加号来连接两个字符串
        let string1 = "string1"
        let string2 = "string2"
        var string3 = string1 + string2
        
//        var string4 = string3 + worldI 类型不同,不能相加
        let string5 : NSString = "oc"
        
//        var string6 = string3 + string5 类型不同 得强转
         var string6 = string3 + (string5 as String)
        
        print(string3,string6)
        
        //使用+= 来将一个字符串添加到一个已经存在的字符串变量上
        var string7 = "default"
        string7 += string6
        
        //使用append 将一个字符追加到一个字符串的尾部 也可以是字符串 append方法可以追加很多
        let charchar : Character = "i"
        string7.append(charchar)
        string7.append(string1)
        
        //Unicode 用于文本的编码和表示 可以用标准格式表示来自任意语言几乎所有的在字符,并能够对文本或网页这样的外部资源中的在字符进行读写操作,Swift的string 和 character 类型是完全兼容Unicode
        //Unicode标量
        //Swift 的string类型是基于Unicode标量简历的。Unicode标量是对应字符或者修饰符的唯一的21位数字
        //Unicode码位的范围 U+0000 到 U+D7FF 或者 U+E000 到 U+10FFFF
        //Unicode标量不八廓Unicode代理项码位 范围是 U+D800 到 U+DFFF
        //不是所有的21位Unicode 标量都代表一个字符
        
        
        //单一标量
        let eacute : Character = "\u{E9}" //é
        //两个标量字形群
        let combineddeacute : Character = "\u{65}\u{301}"
        print(eacute,combineddeacute)

        
        //单一标量
        let precomposed : Character = "\u{D65c}"
        //组合标量排序 为同一个字
        let decomposed : Character = "\u{1112}\u{1161}\u{11AB}"
        print(precomposed,decomposed)

        //测试标量组合 不能颠倒
//        let teststr : Character = "\u{1161}\u{1112}\u{11AB}"
//        print(teststr)
        
        //可扩展的字符群可以使包围记号 U+20DD 标量包围其他Unicode标量,作为一个单一的character值
        print("\u{E9}\u{20DD}") //é⃝  圆形包含
        
        //地域性指示符号Unicode 标量可以组合成一个单一的character值
        // US 符号 组合 U (U+1F1FA)  S (S+1F1F8)
        print("\u{1F1FA}\u{1F1F8}") // 美国国旗
        
        
        
        //字符数量 用count 来知道字符串内含有多少个字符
        let teststring = "hello world"
        print("teststring has \(teststring.count) charracter")
        
        //使用字符群集作为 character值来改变字符串时,并不一定会改变字符串数量
        var word = "cafe"
        print(word + "has \(word.count) character")
        
        word += "\u{301}"
        
        print("\(word) has \(word.count) character")
        
        //NSString 的 length数量 与 Unicode 数量并不总是是相同
        //NSString 是 UTF-16表示的单元数字
        
        //Swift string值关联的索引类型 string.index 对应每个character的位置
        //Swift 中 字符串不能用 integer做索引
        
        //用startIndex 获取一个string 的第一个character索引 使用endIndex获取最后一个character位置的索引
        //但是 endIndex不能作为一个字符串的邮箱下标 如果 stirng 为空串 startindex 与endindex相等
        
        //可以使用 string index(before:)获取某一下标前面  index(after:)获取某一下标后面  index(_:offsetby:)获取某一下标的偏移量 避免多次使用前两个
        //三种方法也可以用在 array dictionary set中
        
        let indexString = "hello world"
        
        print(indexString[indexString.startIndex])
        
//        print(indexString[indexString.endIndex]) 代码出错 因为endindex 为字符串最后一个字符末尾 往后一位为空字符
        
        print(indexString[indexString.index(before: indexString.endIndex)]) //d
        print(indexString[indexString.index(after: indexString.startIndex)]) //e
        print(indexString[indexString.index(indexString.startIndex, offsetBy: 5)]) //因为空格 所以看不出来
        print(indexString[indexString.index(indexString.startIndex, offsetBy: 6)]) //w
        
        //indices  为字符串所有索引范围 range 用来访问单个字符   indices 目录
        for indexx in indexString.indices{
//            print(indexString[indexx])
            print(indexString[indexx], separator:"-", terminator: " ") //由于打印的是单个字符 所以连接符没有起到作用
            //terminator 默认是添加换行符,若果换成别的 就不起到换行效果,会连接下个print语句打印的内容
        }
        
        print(indexString.indices)
        
        //插入
        var welcome = "welcome"
        //在末尾加一个感叹号 在一个指定索引加一个单个字符
        welcome.insert("!", at: welcome.endIndex)
        print(welcome)
        
        //在感叹号前加一段 字符串 在一个指定索引加一段字符串
        welcome.insert(contentsOf: " to China", at: welcome.index(before: welcome.endIndex))
        print(welcome)
        
        //删除某个下标的字符
        welcome.remove(at: welcome.index(before: welcome.endIndex))//删除感叹号
        print(welcome)
        
        //删除一端 指定范围的字符串
        welcome.removeSubrange(welcome.index(welcome.endIndex, offsetBy: -8)..

你可能感兴趣的:(Swift 4.0学习之旅—字符串和字符)