swift字符串和字符

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("被")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辫继,隨后出現(xiàn)的幾起案子怒见,更是在濱河造成了極大的恐慌,老刑警劉巖姑宽,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遣耍,死亡現(xiàn)場離奇詭異,居然都是意外死亡炮车,警方通過查閱死者的電腦和手機舵变,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘦穆,“玉大人纪隙,你說我怎么就攤上這事】富颍” “怎么了绵咱?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長熙兔。 經(jīng)常有香客問我悲伶,道長艾恼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任麸锉,我火速辦了婚禮蒂萎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淮椰。我一直安慰自己五慈,他們只是感情好,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布主穗。 她就那樣靜靜地躺著泻拦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忽媒。 梳的紋絲不亂的頭發(fā)上争拐,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音晦雨,去河邊找鬼架曹。 笑死,一個胖子當著我的面吹牛闹瞧,可吹牛的內(nèi)容都是我干的绑雄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼奥邮,長吁一口氣:“原來是場噩夢啊……” “哼万牺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起洽腺,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤脚粟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蘸朋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體核无,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年藕坯,在試婚紗的時候發(fā)現(xiàn)自己被綠了团南。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡堕担,死狀恐怖已慢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情霹购,我是刑警寧澤佑惠,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響膜楷,放射性物質(zhì)發(fā)生泄漏旭咽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一赌厅、第九天 我趴在偏房一處隱蔽的房頂上張望穷绵。 院中可真熱鬧,春花似錦特愿、人聲如沸仲墨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽目养。三九已至,卻和暖如春毒嫡,著一層夾襖步出監(jiān)牢的瞬間癌蚁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工兜畸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留努释,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓咬摇,卻偏偏與公主長得像伐蒂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子菲嘴,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 一個字符串 是一系列字符的集合饿自,例如hello, world和albatross汰翠。Swift的字符串是String...
    BoomLee閱讀 2,401評論 0 3
  • String是例如"hello, world"龄坪,"albatross"這樣的有序的Character(字符)類型的...
    窮人家的孩紙閱讀 852評論 2 1
  • 今天真的是,無fuck說复唤。 一大早我還沒起床就開始停電健田,我以為只是停一小會兒,沒想到啊沒想到佛纫,居然停到了晚上八點多...
    渣橙閱讀 184評論 0 0
  • 有時候等待也是值得的 風景秀麗要慢慢賞 人生精彩要慢慢等 你會遇見誰 都是命運的安排 和酒夢小姑娘相識緣于文字妓局,看...
    美麗心情0206閱讀 538評論 6 3
  • 枯草在風中微微蕩漾 是誰傳來 那遠方的呼喚 多想用一腔熱血 溫暖這一季的荒涼 哀傷里的憂愁 難以假裝視而不見 此時...
    小胡巴閱讀 337評論 17 40