現(xiàn)有字符串Hello, World!
let helloWorld = "Hello, World!"
想截取前5個字符為子串远舅,有兩種方法提岔,一是使用字符串的集合特性:
let subStringTo5 = String(helloWorld.prefix(5))
二是使用字符串索引:
let subStringTo5 = String(helloWorld[..<helloWorld.index(helloWorld.startIndex, offsetBy: 5)])
print("subStringTo5: \(subStringTo5)")
打印結(jié)果:
subStringTo5: Hello
要對String操作,大多需要通過String.Index為中間媒介來達到拇涤。
對于截取字符串瘤袖,Swift4用的是[startIndex...endIndex]
這樣的語法,在String后跟一個區(qū)間卜录。通俗講戈擒,此區(qū)間的值要求用String.Index類型,下面我們來弄出一些Index值艰毒。
起始Index:
let startIndex = helloWorld.startIndex
在起始Index基礎(chǔ)上偏移5:
let offset5Index = helloWorld.index(startIndex, offsetBy: 5)
在中括號里寫兩個值筐高,可以得到一個子串,結(jié)果是SubString類型。
這種寫法...
是閉區(qū)間柑土,得到結(jié)果包括左右兩個Index對應(yīng)的字符蜀肘;
這種寫法..<
是開區(qū)間,得到結(jié)果包括了左Index對應(yīng)的字符稽屏,但不包括右Index對應(yīng)的字符:
let subString = helloWorld[startIndex..<offset5Index]
如果左Index不寫扮宠,則默認為startIndex:
let subString = helloWorld[..<offset5Index]
以上得到的結(jié)果,類型還不是String狐榔,只是SubString類型而已坛增,還需要我們多做一步工作,構(gòu)造String :
let subStringTo5 = String(helloWorld[..<offset5Index])
print("subStringTo5: \(subStringTo5)")
打印結(jié)果:
subStringTo5: Hello
如果在中括號里只寫一個Index值會怎么樣薄腻?得到的結(jié)果是所寫Index對應(yīng)的字符轿偎,Character類型:
let offset5Character = helloWorld[offset5Index]
print("offset5Character: \(offset5Character)")
打印結(jié)果,是個逗號:
offset5Character: ,
如果覺得Swift4這樣設(shè)計被廓,不習(xí)慣坏晦,那么還是可以通過extension的方式,自己實現(xiàn)一個喜歡的subString方法嫁乘。
extension String {
func mySubString(to index: Int) -> String {
return String(self[..<self.index(self.startIndex, offsetBy: index)])
}
func mySubString(from index: Int) -> String {
return String(self[self.index(self.startIndex, offsetBy: index)...])
}
}
使用:
print("subStringTo8: \(helloWorld.mySubString(to: 8))")
print("subStringFrom5: \(helloWorld.mySubString(from: 5))")
打印結(jié)果:
subStringTo8: Hello, W
subStringFrom5: , World!