(四) [Swift]Swift中的字符串

1.字符串的初始化

//初始化一个空字符串
let str = ""
let str1 = String()

//直接
let swift = "swift"

//通过character数组 
//ps: String可以和character数组互相转换 eg.swift.characters
let swiftInChar:[Character] = ["S","w","i","f","t"]
let swift2  = String(swiftInChar)

//通过反斜杠组建
//注意: 反斜杠的括号内不能有 '\' '回车' 等
let name = "六道"
let swift3 = "hellow \(name)"   

2.unicode

swift中可以通过一个unicode编码来初始化一个字符串

let e = "\u{e9}"              //é
let e1 = "\u{65}\u{301}"      //é
let e3 = e1 + "\u{20DD}"      //é⃝ :这里是有个圆圈包裹着,markdown显示不出来

3.字符串是值类型

与OC中不同,这里的字符串是一个值类型,意思是当一个字符串作为一个函数的参数时,其值会被拷贝。函数内的变化永远不会影响到该字符串本身。

4.遍历字符串

var test = "你好 swift"
//方式一
for t in test.characters{
    print(t)
}
//方式二
test.characters.forEach { (c) in
    print(c)
}
//方式三,这种方式可以得到遍历过程中的索引
for index in test.characters.indices{
    print("\(index) \(test[index])")
}

4.字符串中的索引

每一个字符串都是由一个或多个字符组成,每一个字符由一个或者多个Unicode标量组成。所以每个字符串本质上都是由Unicode标量序列组成。

(1) characters.count和.endIndex的值并不总是相等

let e = "\u{65}\u{301}"  //é
e.endIndex               //2
e.characters.count       //1

(2) 索引:指向字符串中的某个字符的第一个Unicode标量所在的位置。类型为String.index

//如(1)中所示常量e由两个unicode组成,而它的字符的数量却为1
//再举例说明
let e1 = "\u{65}\u{301}"
let e3 = e1 + "n" + e1 + "n"

e3.endIndex  //6
e3.endIndex.predecessor() //5
e3.endIndex.predecessor().predecessor() //3
e3.endIndex.predecessor().predecessor().predecessor() //2
e3.endIndex.predecessor().predecessor().predecessor().predecessor()//0
e3.characters.count //4

(3)索引的相关操作

index.predecessor() //获取上一个索引
index.successor() //获取下一个索引
index.advancedBy(i) //获取第下i个索引
e3.startIndex.distanceTo(end: String.CharacterView.Index) //距离某个index有多少个单位

5.字符串中插入和删除

(四) [Swift]Swift中的字符串_第1张图片
Paste_Image.png

6.字符串判等
当字符串中的unicode标量值一致且顺序一样才会相等

(四) [Swift]Swift中的字符串_第2张图片
6E631297-2C3A-44CD-A36B-245AD2B01048.png

7.前缀和后缀

CF930DBF-9561-466B-809F-D51B0A6A4E1B.png

你可能感兴趣的:((四) [Swift]Swift中的字符串)