一、Substring 类型
- 字符串分割,截取所获得的返回值是 Substring类型
- 子字符串重用了原字符串一部分内存空间,子字符串在做修改操作之前都不需要花费拷贝内存的操作
- String 和Substring 都遵循了 StringProtocol 协议
- Substring 拥有 String 大部分方法,Substring 可以转成 String 类型
二、字符串截取获得子串
1、使用 split 分割,获得是 Substring 类型的 Array
var str = "Hello world!"
// 根据 " " 把 str 分割
var subStirngs = str.split(separator: " ")
print("结果:\(subStirngs)")
print("类型:\(type(of: subStirngs))")
打印结果:
结果:["Hello", "world!"]
类型:Array<Substring>
2、使用 stringIndex 截取
var str = "Hello world!"
// 要截取的字符串起始索引位置
let startIndex = str.index(after: str.firstIndex(of: " ") ?? str.startIndex)
// 要截取的字符串结束索引位置
let lastIndex = str.firstIndex(of: "!") ?? str.endIndex
// 使用区间运算符截取
var subStirngs = str[startIndex ..< lastIndex]
print("结果:\(subStirngs)")
print("类型:\(type(of: subStirngs))")
打印结果:
结果:world
类型:Substring
三、子字符串比对
var str = "Hello world!"
let startIndex = str.index(after: str.firstIndex(of: " ") ?? str.startIndex)
let lastIndex = str.firstIndex(of: "!") ?? str.endIndex
var subStirngs = str[startIndex ..< lastIndex]
var str2 = "world"
var isEques = subStirngs == str2
print("subStringsType: \(type(of: subStirngs)); \nstr2Type: \(type(of: str2)); \nvalue eques: \(isEques)")
打印结果
subStringsType: Substring;
str2Type: String;
value eques: true