字符串索引
每一个 String 值都有一个关联的索引(index)类型,String.Index,它对应着字符串中的每一个 Character 的位置。
使用 startIndex 属性可以获取一个 String 的第一个 Character 的索引。使用 endIndex 属性可以获取最后一个 Character 的后一个位置的索引。因此,endIndex 属性不能作为一个字符串的有效下标。如果 String 是空串,startIndex 和 endIndex 是相等的。
通过调用 String 的 index(before:) 或 index(after:) 方法,可以立即得到前面或后面的一个索引。你还可以通过调用 index(_:offsetBy:) 方法来获取对应偏移量的索引
let welcome = "hello world"
print(welcome[welcome.startIndex])
// h
print(welcome[welcome.index(after: welcome.startIndex)])
// e
print(welcome[welcome.index(before: welcome.endIndex)])
// d
let someIndex = welcome.index(welcome.startIndex, offsetBy: 3)
print(welcome[someIndex])
// l
let anotherIndex = welcome.index(welcome.endIndex, offsetBy: -3)
print(welcome[anotherIndex])
// r
字符串的截取
Rang
A half-open interval from a lower bound up to, but not including, an upper bound.
从下界到上界的半开区间,但不包括上界(来自有道翻译)。
使用range(of: ) 可以根据给定的选项(条件)在给定的字符串范围内查找并返回给定选项(条件)第一次出现的范围。Range中包含两个属性lowerBound(下界)upperBound (上界)
示例
let someString = "今天你恰饭了吗"
// someRang的类型是 Range<String.Index>?
if let someRange = someString.range(of: "恰饭") {
print(someString[someRange])
// 恰饭
print(someString[someRange.lowerBound])
// 恰
print(someString[someRange.upperBound])
// 了
}
从上面的示例中我们可以得出 lowerBound 类似我们给定条件的startIndex也就是“恰饭”的第一个索引,而upperBound类似我们给定条件的endIndex也就是“恰饭”最后一个 Character 的后一个位置的索引。
在空范围内,“下界”等于“上界”
下面是对微博来源字符串截取的一个示例:
let source = "<a href=\"http://weibo.com/\" rel=\"nofollow\">榜姐的iPhone客户端</a>"
let startRang = source.range(of: ">")!
let endRang = source.range(of: "</")!
print(source[...startRang.lowerBound])
// <a href="http://weibo.com/" rel="nofollow">
print(source[startRang.upperBound...])
// 榜姐的iPhone客户端</a>
print(source[startRang.upperBound..<endRang.lowerBound])
// 榜姐的iPhone客户端
网友评论