美文网首页SwiftSwift-String
Swift4.x 截取字符串、从字符串中查找子串位置

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

作者: 游龙飞雪 | 来源:发表于2018-06-07 11:47 被阅读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)
    可以设置查找方向-从头查找/从尾部倒序查找。

    相关文章

      网友评论

        本文标题:Swift4.x 截取字符串、从字符串中查找子串位置

        本文链接:https://www.haomeiwen.com/subject/nytgsftx.html