截取字符串在Swift中相比OC要復雜很多,主要原因可能還是OC的NSRange的創建方法中參數類型為int,而Swift卻對類型要求很嚴格,int不能作為參數創建Range,這要使用String中的startIndex和endIndex,但問題又出來了,如果要有靈活的范圍呢?在之前可以直接就用advance函數,現在的Swift沒有這個函數了,要用到advancedBy和distanceTo。
以下代碼是對於Range和advancedBy函數的使用:
//截取子串 let str = "Hello,Swift" let startIndex = str.startIndex //方法一:使用advancedBy + stringByReplacingCharactersInRange let endIndexA = startIndex.advancedBy(str.characters.count-1) let rangeOfHelloA = Range(start: startIndex, end: endIndexA) let newStr = str.stringByReplacingCharactersInRange(rangeOfHelloA, withString: "") print("newStr1 = " + newStr) //方法二:advancedBy + subStringWithRange let newStr2 = str.substringWithRange(rangeOfHelloA) print("newStr2 = " + newStr2) //方法三:使用NSString類型;Swift也提供了NSString和S挺 let str_OC = str as NSString let newStr3 = str_OC.substringWithRange(NSRange(location: 0, length: 5)) as String //或者 // let newStr3 = str_OC.substringWithRange(NSMakeRange(0, 5)) as String print("newStr3 = " + newStr3) //插入字符 var originStr = "0000" originStr.insert("5", atIndex: originStr.startIndex.advancedBy(2)) print("newstr4 = " + originStr) //插入字符串->字符串需要轉成字符集才能進行操作 originStr.insertContentsOf("字符串".characters, at: originStr.startIndex.advancedBy(2)) print("newStr5 = " + originStr) //移除其中的某個字符 var originStr2 = "12345" originStr2.removeAtIndex(originStr2.startIndex) print("newStr6 = " + originStr2) //移除子串 注意:endIndex是從整個字符的后一位開始的,直接使用originStr2.endIndex會導致越界; let removeRange = originStr2.startIndex.advancedBy(1)...originStr2.endIndex.advancedBy(-2) originStr2.removeRange(removeRange) print("newStr7 = " + originStr2)
運行結果:

