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