1、字符串的创建


var string = "Hello World!"
var str1: String = "Hello Swift!"
let multiStr = """
这是一个多行字符串的创建
这是一个多行字符串的创建
这是一个多行字符串的创建
这是一个多行字符串的创建
"""
// 直接创建空字符串
var str = ""


通过构造方法来进行字符串的构造


var string = ""
string = String()              // 构造空字符串  ""
string = String("hello")       // 通过字符串构造 "hello"
string = String(666)           // 通过整型数据构造  "666"
string = String(6.66)          // 通过浮点型数据构造 "6.66"
string = String("a")           // 通过字符构造  "a"
string = String(false)         // 通过Bool   造 "false"
string = String(describing: (1,2.3,true))    // 通过元组构造  "(1,2.3,true)"
string = String(format: "hello %@", "Swift") // 通过格式化字符串构造  "hello Swift"


2、字符串拼接

Swift 中的 String 类型使用 + 实现字符串的拼接


let s1 = "Hello"
let s2 = "World"
let s3 = s1 + " " + s2      // "Hello World"


Swift 中还提供了一种十分方便的字符串插值方法 ()


let str = "Hello (920)"       // "Hello 920"
let name = "Tom"
let str2 = "Hello (name)"     // "Hello Tom"


“()”结构可以将其他数据类型转换为字符串类型,并插入到字符串中的相应位置,这种方法可以非常方便的进行字符串的格式化,是比较常用的一种开发手段。

3、字符串是否为空

判断字符串是否为空


let str = ""
if str.isEmpty {
     print("字符串为空")
}


还可以使用字符串的 count 属性,来判断字符串是否为空


let str = ""
if str.count == 0 {
     print("字符串为空")
}


4、字符串下标取值

通过字符串下标,获取字符串中对应位置的字符


let str = "abcdefg"
// 获取字符串的开始位置下标
let startIdx = str.startIndex
// 获取字符串的结束位置下标,该下标为字符串长度,该位置无字符
let endIdx = str.endIndex
// 获取字符串中的第一个字符
let firstChar = str[startIdx]        // "a"
// 获取字符串中最后一个字符,这里的下标应该是endIdx的前一个
let lastChar = str[str.index(endIdx, offsetBy: -1)]     // "g"
// 获取字符串中第 n 个字符
let n = 2
let nChar = str[str.index(startIdx, offsetBy: (n-1))]   // "b"
// 获取某个下标后一个下标对应的字符
let afterChar = str[str.index(after: startIdx)]         // "b"
// 获取某个下标前一个下标对应的字符
let beforeChar = str[str.index(before: endIdx)]         // "g"


需要注意的是,startIndex 和 endIndex 的类型是 String.Index ,而不是整型。所以不能用这个值进行加减运算,获取字符串中位置字符的方式,可以使用 String.index(String.Index, offsetBy: String.IndexDistance)

5、字符串截取子串

我们可以通过传入下标范围的方式,来截取字符串中的某一段子串


let str = "abcdefg"
// 截取子串 cde ,“...”为范围运算符,包含结束位置
let subStr = str[str.index(str.startIndex, offsetBy: 2)...str.index(str.endIndex, offsetBy: -3)]
// 截取子串 def ,“..<”为范围运算符,不包含结束位置
let subStr2 = str[str.index(str.startIndex, offsetBy: 3)..<str.index(str.endIndex, offsetBy: -1)]


代码中,offsetBy: 参数传的是下标移动的位数,正数表示下标向后移动相应位数;负数表示下标向前移动相应位数。

6、字符串其他常用方法

获取子串在父串中的范围


let str = "abcdefg"
let range = str.range(of: "bcd")     // {{_rawBits 65536}, {_rawBits 262144}}


在字符串后面追加字符 or 字符串


var str = "abcdefg"
str.append(Character("!"))      // "abcdefg!"
str.append("ABC")               // "abcdefg!ABC"
str.append("M")                 // "abcdefg!ABCM"


在指定位置(前)插入一个字符 or 字符串


var str = "abcdefg"
str.insert(contentsOf: "SSS", at: str.index(str.startIndex, offsetBy: 3))   // "abcSSSdefg"
str.insert(contentsOf: ["S","w","i","f","t"], at: str.index(str.endIndex, offsetBy: 0))   // "abcSSSdefgSwift"
str.insert("~", at: str.startIndex)     // "~abcSSSdefgSwift"


在指定范围替换一个字符串


var str = "abcdefg"
str.replaceSubrange(str.index(str.startIndex, offsetBy: 2)..<str.index(str.startIndex, offsetBy: 4), with: "SOS")  // "abSOSefg"


在指定位置删除一个字符 or 字符串


var str = "abcdefg"
// 删除一个字符
str.remove(at: str.index(after: str.startIndex))
// 删除一个字符串
str.removeSubrange(str.startIndex..<str.index(str.startIndex, offsetBy: 3))
// 删除所有字符
str.removeAll()


字符串的大小写转换


var str = "abcdefg"
// 全部转换为大写
str.uppercased()     // "ABCDEFG"
// 全部转换为小写
str.lowercased()     // "abcdefg"


检查字符串的前缀和后缀


var str = "Hello World!"
// 检查字符串是否有前缀 He
str.hasPrefix("He")      // true
// 检查字符串是否有后缀 World!
str.hasSuffix("World!")  // true