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使用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Range截取字符串

Swift截取字符串(转载)

工作随笔——Swift中的Range和一些字符操作

Swift4 字符串截取-超级简单用法

swift 4 字符串截取

Kotlin字符串操作 ① ( 截取字符串函数 substring | 拆分字符串函数 split | 解构语法特性 )