Swift4.2 对字符串的一些操作

对swift里字符串进行了一些扩展,基本就是重写了oc sub方法

1.从头切,切到哪里.

str.bdSubString(to: 6)

2.从哪里切,切到头

str.bdSubString(from: 2)

3从哪里切到哪里

str.bdSubString(from: 0, to: 6)

4 取某两个特定字符串之间的值.

str.bdSubString(fromStr: "&", toStr: "@")

5 从头切,切到某个特定的字符串. or 从某个特定的字符串切到尾

let str = "123456&899"
        if let firstStr = str.components(separatedBy: "&").first {// last 同理
            print(firstStr)
        }

 

具体扩展如下:

//
//  NSString+BDCreatString.swift
//  String_new
//
//  Created by dongqiangfei on 2019/1/11.
//  Copyright © 2019年 飞飞. All rights reserved.
//

import Foundation
func getIndexIfInStr(str: String, nums: Int) -> Bool{
    if nums > (str.count - 1) {
        print("NSString+BDCreatString: 字符串位置错误")
        return false
    } else if nums < 0 {
        print("NSString+BDCreatString: 字符串位置错误")
        return false
    } else {
        return true
    }
}

extension String {
    /** 从头开始切,切到哪里你来定*/
    func bdSubString(to: Int) -> String {
        if getIndexIfInStr(str: self, nums: to) {
            let index = self.index(self.startIndex, offsetBy: to, limitedBy: self.endIndex)
            return (String(self[self.startIndex...index!]))
        } else {
            return ""
        }
        
    }
    
    /** 从哪开始,一直切到尾*/
    func bdSubString(from: Int) -> String {
        if getIndexIfInStr(str: self, nums: from) {
            let index = self.index(self.startIndex, offsetBy: from, limitedBy: self.endIndex)
            return (String(self[index!..<(self.endIndex)]))
        } else {
            return ""
        }
    }
    
    /** 从哪开始,切到哪里*/
    func bdSubString(from: Int, to: Int) -> String {
        if getIndexIfInStr(str: self, nums: from) && getIndexIfInStr(str: self, nums: to) {
            let indexFrom = self.index(self.startIndex, offsetBy: from, limitedBy: self.endIndex)
            let indexTo = self.index(self.startIndex, offsetBy: to, limitedBy: self.endIndex)
            return (String(self[indexFrom!...indexTo!]))
        } else {
            return ""
        }
    }
    
    /**从那个字符串开始切,切到那个字符串(需两个不同的字符串)*/
    func bdSubString(fromStr: String, toStr: String) -> String {
        let from = self.positionOf(sub: fromStr)
        let to = self.positionOf(sub: toStr)
        if getIndexIfInStr(str: self, nums: from) && getIndexIfInStr(str: self, nums: to) {
            let indexFrom = self.index(self.startIndex, offsetBy: from + fromStr.count, limitedBy: self.endIndex)
            let indexTo = self.index(self.startIndex, offsetBy: to, limitedBy: self.endIndex)
            return (String(self[indexFrom!..<indexTo!]))
        } else {
            return ""
        }
    }
    
    func positionOf(sub:String, backwards:Bool = false)->Int {
        var pos = -1
        if let range = range(of:sub, options: backwards ? .backwards : .literal ) {
            if !range.isEmpty {
                pos = self.distance(from:startIndex, to:range.lowerBound)
            }
        }
        return pos
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值