Swift4.x 截取字符串、从字符串中查找子串位置
- 截取字符串 substring,现在 Swift4.x 使用 prefix(截取前面的)、suffix(截取后面的) 代替。
- 查找子串位置 Index and Range
正文:
Swift中字符串截取是比较麻烦的一件事。如果转成NSString(str as NSString)再操作,虽然做起来熟悉,但是怎么说也违背了使用swift的初衷。
试过多种方式,找到一种方法与大家分享。觉得swift中操作字符串虽然繁琐些,但总体来说比oc方便很多。
一、截取
在截取字符串中使用到 String.Index ,可以使用多种方式自己构造 String.Index。
直接上代码,简单明了。
二、查找位置
本文用到 Range'类'、String.Index、str.distance方法、str -> subscript方法 等。
Range<String.Index> 是一个半开放的区间,前闭后开区间,不包含最大值。
分享如下:
let str: String = "我最爱北京天安门!"
let range: Range = str.range(of: "北京")!
let location: Int = str.distance(from: str.startIndex, to: range.lowerBound)
/* location = 3 */
let keyLength: Int = str.distance(from: range.lowerBound, to: range.upperBound)
// let key = "北京"; let keyLength = key.count; //count = 2
/* keyLength = 2 */
print("location = \(location), length = \(keyLength)")
/* location = 3, length = 2 */
// SubString
let frontStr: Substring = str[str.startIndex ..< range.lowerBound]
print("frontSubStr = \(frontStr)")
/* 我最爱 */
let frontStr2: Substring = str[str.startIndex ... range.lowerBound]
print("frontSubStr2 = \(frontStr2)")
/* 我最爱北 */
// MARK: 下面这几个方法,可以自己试一下
/*
func index(after: String.Index)
Returns the position immediately after the given index.
func formIndex(after: inout String.Index)
Replaces the given index with its successor.
func index(before: String.Index)
Returns the position immediately before the given index.
func formIndex(before: inout String.Index)
Replaces the given index with its predecessor.
*/
let frontTest_before: Substring = str[str.startIndex ..< str.index(before: range.lowerBound)]
let frontTest_after: Substring = str[str.startIndex ..< str.index(after: range.lowerBound)]
print("before = \(frontTest_before), after = \(frontTest_after)")
/* before = 我最, after = 我最爱北 */
使用distance另一个构造方法
let range = range(of:sub, options: .backwards)
可以设置查找方向-从头查找/从尾部倒序查找。