Swift4.x 截取字符串、從字符串中查找子串位置
- 截取字符串 substring鞭衩,現(xiàn)在 Swift4.x 使用 prefix(截取前面的)学搜、suffix(截取后面的) 代替。
- 查找子串位置 Index and Range
正文:
Swift中字符串截取是比較麻煩的一件事论衍。如果轉(zhuǎn)成NSString(str as NSString)再操作瑞佩,雖然做起來熟悉,但是怎么說也違背了使用swift的初衷坯台。
試過多種方式炬丸,找到一種方法與大家分享。覺得swift中操作字符串雖然繁瑣些蜒蕾,但總體來說比oc方便很多稠炬。
一、截取
在截取字符串中使用到 String.Index 咪啡,可以使用多種方式自己構(gòu)造 String.Index首启。
直接上代碼,簡單明了撤摸。
二毅桃、查找位置
本文用到 Range'類'、String.Index准夷、str.distance方法钥飞、str -> subscript方法 等。
Range<String.Index> 是一個半開放的區(qū)間衫嵌,前閉后開區(qū)間读宙,不包含最大值。
分享如下:
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另一個構(gòu)造方法
let range = range(of:sub, options: .backwards)
可以設置查找方向-從頭查找/從尾部倒序查找。