String類型是一種快速纷责、現(xiàn)代化的字符串實現(xiàn),每一個字符串都是由編碼無關的Unicode字符組成臣樱,并支持訪問字符的多種Unicode表示形式靶擦,如:UTF8、UTF16等雇毫。字符串的內(nèi)容都是由一個個的Character組成玄捕。
在開發(fā)中,對字符串棚放、字符常用的操作有:
初始化空字符串
使用可變枚粘、不可變字符串
字符串是值類型
與NSString互轉(zhuǎn)
計算字符數(shù)量
比較字符串
連接字符串和字符
獲取、刪除飘蚯、添加馍迄、修改字符/字符串
分割字符串
注意:
Swift的String類型與Foundation NSString類進行了無縫橋接,因此這兩者可以直接互轉(zhuǎn)局骤,然后可調(diào)用對應的類型的所有API攀圈。
初始化空串
初始化空字符串有三種方式,分別為:
直接使用雙引號
使用String結(jié)構(gòu)體的無參構(gòu)造函數(shù)
使用String結(jié)構(gòu)體的有參構(gòu)造函數(shù)峦甩,但參數(shù)傳雙引號
var string = "" // 空字符串
string = String() // 空字符串
string = String("")// 空字符串
字符Character最常用的構(gòu)造函數(shù):
/// 根據(jù)一個只有一個字符的字符串創(chuàng)建一個`Character`
///
/// 要求參數(shù)s字符串中只能包含一個字符
public init(_ s: String)
對于初始化字符常用的方式
// 對于構(gòu)造函數(shù):public init(_ s: String)
// 我們必須保證所傳的參數(shù)`s`字符串中最多包含一個字符赘来,否則會`Crash`掉
var c = Character("1")// OK
var cc = Character("10") // Factal error
// 上面使用構(gòu)造的方法與下面這種直接賦值的方式是一樣的,實際上也是通過轉(zhuǎn)換成構(gòu)造函數(shù)`public init(_ s: String)`來初始化
var c: Character = "A"
與NSString互轉(zhuǎn)
Swift中的String與Foundation中的NSString進行了無縫橋接凯傲,因此我們在使用中可以直接讓這兩種類型直接互轉(zhuǎn)犬辰,不會出現(xiàn)失敗。
var ss = "String中并不包含所有的NSString的方法"
var nss = ss as NSString // OK
var str = nss as String // OK
但是冰单,我們不能直接將String轉(zhuǎn)換成NSMutableString忧风。由于String與NSString是無縫橋接的,因此轉(zhuǎn)換必定成功球凰,直接使用as轉(zhuǎn)換即可狮腿。
提示:類型轉(zhuǎn)換使用關鍵字as腿宰,如果轉(zhuǎn)換有可能失敗,則需要使用as?缘厢。如果認為一定不會失敗吃度,我們可以使用強制轉(zhuǎn)換as!,但是一旦失敗就會崩潰贴硫。
計算字符數(shù)量
計算字符串的字符的個數(shù)與NSString的不一樣椿每,沒有l(wèi)ength方法。在String中英遭,對字符的操作间护,主要是通過其屬性characters來操作。
let str = "計算字符串de個數(shù)"
print(str.characters.count) // 9
當前我們也可以通過直接轉(zhuǎn)換成NSString再獲取其長度:
let name = str as NSString
print(name.length) // 9
比較字符串
對于字符串String的比較挖诸,與NSString相比汁尺,簡單了很多,因此Swift支持重載函數(shù)和符號函數(shù)多律,因此痴突,就可以直接定義==、!=函數(shù)狼荞。判斷是否相等辽装,使用兩個等號==,不相等就用!=就可以了相味。
if str != "謝謝" {
print("不相等")
}
if "謝謝" == "謝謝" {
print("肯定相等")
}
通常我們還會對字符串的前綴拾积、后綴比較:
if str.hasPrefix("字符串") {
print("有...")
}
if str.hasSuffix("連接") {
print("有...")
}
還可以直接判斷是否包含某個子串:
print(str.containsString("符"))// true
判斷是否為空串,可以使用==判斷丰涉,也可以直接獲取其屬性isEmpty拓巧,注意它不是一個函數(shù):
print(str.isEmpty)// false
print(str == "") // false
雖然兩者都有兩樣的效果,但是推薦使用isEmpty昔搂,可讀性更強一些玲销。
連接字符串和字符
在Swift中,對String字符串類型操作摘符,比NSString要簡單多了贤斜,拼接字符串,可直接使用+=符號函數(shù)逛裤,也可以使用(變量名)這種方式插入瘩绒,還可以使用append方法添加字符。
var str = "字符串連接"
// str=字符串連接值拷貝,string=值拷貝
str += string
// 使用\(變量带族、常量锁荔、函數(shù)返回值等)
str = "\(str)\(string)"
// 注意,由于"A"這么寫編譯器無法識別是字符還是字符串蝙砌,
// 且append只能追加一個字符阳堕,不能追加字符串
//str.append("A")// 提示:mutating func append(c: Character)
str.append(Character("A"))// 傳類型強轉(zhuǎn)換就可以了
// 如果是追加字符串跋理,可以使用`write`方法
str.write("頂起")
print(str)
獲取、刪除恬总、添加前普、修改字符/字符串
對于刪除、添加壹堰、修改字符串拭卿,只是對可變字符串有效。
添加字符串的與上面的連接字符串和字符是一樣的贱纠。關于write方法和append方法有多個函數(shù)峻厚,自己再深入學習。當然還有insert方法谆焊、appendContentsOf等
刪除字符:
清空字符串可以使用removeAll等方法惠桃,也可以直接使用雙引號:
// 傳true參數(shù),表示內(nèi)容清除懊渡,但容量不變
str.removeAll(keepCapacity: true)
// 使用默認值刽射,容量會清掉
str.removeAll()
// 也可以使用這樣:
str = ""
// 還可以直接使用刪除范圍函數(shù):
str.removeRange(Range(start: str.startIndex, end: str.endIndex))
刪除部分字符:
// 刪除第一個字符
str.removeAtIndex(str.startIndex)
// 刪除第一個字符
str.characters.removeFirst()
// 刪除最后一個字符
str.characters.removeLast()
// 刪除某個函數(shù)
str.removeRange(Range(start: str.startIndex, end: str.endIndex))
修改字符串:
我們主要是使用replaceRange方法:
let range = str.rangeOfString("頂起")
str.replaceRange(range!, with: "被替換的值")
print(str)
獲取字符串军拟、字符
通過循環(huán)的方式來遍歷:
for c in str.characters {
print(c)
}
如果在遍歷中需要知道其索引和值剃执,可以通過快速枚舉:
for (index, c) in str.characters.enumerate() {
print("c = \(c), index= \(index)")
}
下面這種方式是非常少用的,因為非常不好用:
for var index = 0; index < str.characters.count; ++index {
// 不能直接使用str[index]獲取懈息,也沒有str.characters[index]
}
分割字符串
最常用的方法就是componentsSeparatedByString肾档,會返回一個數(shù)組:
str.componentsSeparatedByString("被")