SwiftSwift-String

Swift4.x 截取字符串、从字符串中查找子串位置

2018-06-07  本文已影响31人  游龙飞雪

Swift4.x 截取字符串、从字符串中查找子串位置

  1. 截取字符串 substring,现在 Swift4.x 使用 prefix(截取前面的)、suffix(截取后面的) 代替。
  2. 查找子串位置 Index and Range

正文:

Swift中字符串截取是比较麻烦的一件事。如果转成NSString(str as NSString)再操作,虽然做起来熟悉,但是怎么说也违背了使用swift的初衷。

试过多种方式,找到一种方法与大家分享。觉得swift中操作字符串虽然繁琐些,但总体来说比oc方便很多。

一、截取

在截取字符串中使用到 String.Index ,可以使用多种方式自己构造 String.Index。
直接上代码,简单明了。

image.png

二、查找位置

本文用到 Range'类'、String.Index、str.distance方法、str -> subscript方法 等。

分享如下:


image.png image.png
    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)
可以设置查找方向-从头查找/从尾部倒序查找。

上一篇下一篇

猜你喜欢

热点阅读