对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
}
}