Swift字符串截取与Range使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift字符串截取与Range使用相关的知识,希望对你有一定的参考价值。
参考技术A 开发语言:Swift 4.2开发环境:Xcode 10.1
在Swift中,有一套全新的截取字符串的方式
首先,我们要先熟悉以下两个类型
String.Index表示一个位置,使用String与String.Index可以获取该位置的Character
如上所示,我们构造了两个String.Index,分别表示String的第1个Character和第6个Character,
随后,使用这两个String.Index也输出了str的对应位置的Character。
但实际使用中我们往往不会手动构造String.Index,取而代之的是以下方法。
神奇的是,我们使用上面方法构造的String.Index,可以提供给任意一个String使用,而非只能用于构造它的String
可见,String.Index是独立于String存在的,用于获取或者表示某个Character位置的类型
Range<T> 表示一个T类型的范围,以下使用Range<Int>依次说明Range的几种构造方式和用法
输出:
["b", "c", "d", "e"]
["b", "c", "d", "e"]
["b", "c", "d"]
["b", "c", "d"]
我们可以使用lowerBound和upperBound来访问Range的起始位置和结束位置,注意无论是闭区间或半开区间,他们的upperBound的位置是一样的。
输出:
1
b
4
e
4
e
我们建立了四种不同类型的Range,分别为ClosedRange,CountableClosedRange,Range,CountableRange。
其中前两个为闭区间,后两个半开区间。
同时,Swift4.0又新增了单侧区间的概念,具体如下
输出:
["a", "b", "c", "d", "e"] //start~下标4(包括4)
["b", "c", "d", "e", "f"] //下标1~end
["a", "b", "c", "d"] //start~下标4(不包括4)
对于单侧区间,lowerBound和upperBound也只有一半,例如上例中的range1和rang3只有upperBound,range2只有lowerBound。
上一节我们介绍了Range是描述一个范围的类型,同样也构造了多种不同的Range<Int>来获取数组的值,但Range<Int>不能用来获取String的某一部分的值,想要获取String的某一部分的值,我们需要用到的是Range<String.Index>
下面我们使用3个String.Index构造5个不同的类型的Range<String.Index>,然后使用String[range]来截取字符串。
输出:
23456 //下标1~下标5(包括5)
67 //下标5~下标7(不包括7)
123456 //start~下标5(包括5)
23456789 //下标1~end
1234567 //start~下标7(不包括7)
使用Range<String.Index>可以轻松的截取一个String,但现实使用往往需要在一个String中查找或者截取另一个String的位置。
遇到这样的需求,我们可以使用如下方法
输出:
123 //截取4567前面的部分
89 //截取4567后面的部分
123 //效果与..<range.lowerBound一样,截取range.lowerBound前面的部分
89 //效果与range.upperBound...一样,截取range.upperBound后面的部分
lowerBound与upperBound
//4.以某一特定位置来截取字符串
var string = " https://www.baidu.com"
let range = string.range(of: "baidu")
let lowerStr = string.substring(to: (range?.lowerBound)!)
//结果为: https://www.
print("to lower string: \(lowerStr)")
let upperStr = string.substring(to: (range?.upperBound)!)
//结果为: https://www.baidu
print("to upper string: \(upperStr)")
let lowerStr2 = string.substring(from: (range?.lowerBound)!)
//结果为: baidu.com
print("from lower string: \(lowerStr2)")
let upperStr2 = string.substring(from: (range?.upperBound)!)
//结果为: .com
print("from upper string: \(upperStr2)")
以上是关于Swift字符串截取与Range使用的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin字符串操作 ① ( 截取字符串函数 substring | 拆分字符串函数 split | 解构语法特性 )