Swift3.1_字符串

字符串字面量

您可以在您的代碼中包含一段預(yù)定義的字符串值作為字符串字面量谦炒。字符串字面量是由雙引號""包裹著的具有固定順序的文本字符集碴开。 字符串字面量可以用于為常量和變量提供初始值:

let someString = "Some string literal value"

someString常量通過字符串字面量進(jìn)行初始化故硅,Swift會推斷該常量為String類型针余。

初始化空字符串

要創(chuàng)建一個空字符串作為初始值芯急,可以將空的字符串字面量賦值給變量豌蟋,也可以初始化一個新的String實例:

var emptyString = ""               // 空字符串字面量
var anotherEmptyString = String()  // 初始化方法

判斷該字符串是否為空:

print(emptyString.isEmpty)    // true

字符串可變性

您可以通過將一個特定字符串分配給一個變量來對其進(jìn)行修改速和,或者分配給一個常量來保證其不會被修改

var variableString = "hello"
variableString += " world"
// variableString 現(xiàn)在為 "hello world"

let constantString = "hello"
constantString += " world"
// 這會報告一個編譯錯誤 (compile-time error) - 常量字符串不可以被修改歹垫。

字符串是值類型

String的定義就是一個結(jié)構(gòu)體,結(jié)構(gòu)體是值類型颠放。在Swift中struct和class的區(qū)別中進(jìn)行了詳細(xì)描述县钥。

public struct String {
  ...
}

如果您創(chuàng)建了一個新的字符串,那么當(dāng)其進(jìn)行常量慈迈、變量賦值操作若贮,或在函數(shù)、方法中傳遞時痒留,會進(jìn)行值拷貝谴麦。 任何情況下,都會對已有字符串值創(chuàng)建新副本伸头,并對該新副本進(jìn)行傳遞或賦值操作匾效。

var str1 = "hello"
var str2 = str1
str2 = "hello world"
print("str1: "+str1+"  str2: "+str2)
// str1: hello  str2: hello world

字符

Swift中用characters表示字符。

for character in "Dog".characters {
    print(character)
}
// D
// o
// g

字符串可以通過傳遞一個值類型為Character的數(shù)組作為自變量來初始化:

let catCharacters: [Character] = ["C", "a", "t", "!", "??"]
let catString = String(catCharacters)    // "Cat!??"

還可以判斷字符串是否包含字符:

catString.contains("a")    // true

獲取字符個數(shù):

catString.characters.count    // 5

連接字符串和字符

通過加法運算符+連接在一起創(chuàng)建一個新的字符串:

let string1 = "hello"
let string2 = " world"
let welcome = string1 + string2    // welcome 現(xiàn)在等于 "hello world"

通過加法賦值運算符+=將一個字符串添加到一個已經(jīng)存在字符串變量上:

var string = "hello"
string += " world"    // string 現(xiàn)在等于 "hello world"

append()方法將一個字符附加到一個字符串變量的尾部:

var string = "hello world"
let ch: Character = "!"
string.append(ch)    // string 現(xiàn)在等于 "hello world!"
string.append("...") // string 現(xiàn)在等于 "hello world!..."

字符串插值

字符串插值是一種構(gòu)建新字符串的方式恤磷,可以在其中包含常量面哼、變量野宜、字面量和表達(dá)式。 您插入的字符串字面量的每一項都在以反斜線為前綴的圓括號中:

let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
// message 是 "3 times 2.5 is 7.5"

注意:
插值字符串中寫在括號中的表達(dá)式不能包含非轉(zhuǎn)義反斜杠\魔策,并且不能包含回車或換行符匈子。不過,插值字符串可以包含其他字面量闯袒。

Unicode

Unicode是一個國際標(biāo)準(zhǔn)虎敦,用于文本的編碼和表示。 它使您可以用標(biāo)準(zhǔn)格式表示來自任意語言幾乎所有的字符政敢,并能夠?qū)ξ谋疚募蚓W(wǎng)頁這樣的外部資源中的字符進(jìn)行讀寫操作其徙。SwiftStringCharacter類型是完全兼容Unicode標(biāo)準(zhǔn)的。

Unicode 標(biāo)量

SwiftString類型是基于Unicode標(biāo)量建立的喷户。Unicode標(biāo)量是對應(yīng)字符或者修飾符的唯一的21位數(shù)字唾那,注意不是所有的21Unicode標(biāo)量都代表一個字符,因為有一些標(biāo)量是留作未來分配的褪尝。

字符串字面量的特殊字符

字符串字面量可以包含以下特殊字符:

  • 轉(zhuǎn)義字符
    空字符\0通贞、反斜線\\、水平制表符\t恼五、換行符\n昌罩、回車符\r、雙引號\"灾馒、單引號\'茎用。
  • Unicode標(biāo)量
    寫成\u{n}(u為小寫),其中n為任意一到八位十六進(jìn)制數(shù)且可用的Unicode位碼睬罗。
let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imageination is more important than knowledge" - Enistein
let dollarSign = "\u{24}"             // $, Unicode 標(biāo)量 U+0024
let blackHeart = "\u{2665}"           // ?, Unicode 標(biāo)量 U+2665
let sparklingHeart = "\u{1F496}"      // ??, Unicode 標(biāo)量 U+1F496

訪問字符串

每一個String值都有一個關(guān)聯(lián)的索引index類型轨功,String.Index它對應(yīng)著字符串中的每一個Character的位置。

  • 第一個索引
    let string = "hello world"
    let start = string.startIndex    // String.Index 類型
    string[start]                    // 結(jié)果 h
    
  • 最后一個索引
    使用endIndex屬性可以獲取最后一個Character的后一個位置的索引容达。因此古涧,endIndex屬性不能作為一個字符串的有效下標(biāo)。
    string[string.endIndex]       // 越界錯誤 
    string.index(after: endIndex) // 越界錯誤 
    
  • 索引
    通過上一個索引和下一個索引獲取對應(yīng)索引:
    string[string.index(after: string.startIndex)] // 第二個 e
    string[string.index(before: string.endIndex)]  // 最后一個字符 d
    
    通過偏移量獲取對應(yīng)的索引:
    let index = string.index(string.startIndex, offsetBy: 4)
    string[index]    // o
    
  • 根據(jù)字符獲取索引
    let index = string.index(of: "w")
    

修改字符串

插入
var welcome = "hello"

welcome.insert("!", at: welcome.endIndex)
// welcome 變量現(xiàn)在等于 "hello!"

welcome.insert(contentsOf:" world".characters, at: welcome.index(before: welcome.endIndex))
// welcome 變量現(xiàn)在等于 "hello world!"
刪除
welcome.remove(at: welcome.index(before: welcome.endIndex))
// welcome 現(xiàn)在等于 "hello world"

let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.removeSubrange(range)
// welcome 現(xiàn)在等于 "hello"
替換
var welcome = "hello world"
let range = welcome.index(welcome.startIndex, offsetBy: 6)..< welcome.endIndex
welcome.replaceSubrange(range, with: "Swift")
// welcome 現(xiàn)在等于 "hello Swift"

前綴花盐、后綴相等

let string = "hello world"
string.hasPrefix("a")    // false
string.hasSuffix("d")    // true

大小寫切換

string.lowercased()
string.uppercased()

字符串轉(zhuǎn)數(shù)組

let string = "a,b,c,d"
string.components(separatedBy: ",")    // ["a", "b", "c", "d"]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末羡滑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子算芯,更是在濱河造成了極大的恐慌柒昏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熙揍,死亡現(xiàn)場離奇詭異职祷,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門有梆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來是尖,“玉大人,你說我怎么就攤上這事泥耀〗刃冢” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵爆袍,是天一觀的道長。 經(jīng)常有香客問我作郭,道長陨囊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任夹攒,我火速辦了婚禮蜘醋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咏尝。我一直安慰自己压语,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布编检。 她就那樣靜靜地躺著胎食,像睡著了一般。 火紅的嫁衣襯著肌膚如雪允懂。 梳的紋絲不亂的頭發(fā)上厕怜,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音蕾总,去河邊找鬼粥航。 笑死,一個胖子當(dāng)著我的面吹牛生百,可吹牛的內(nèi)容都是我干的递雀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚀浆,長吁一口氣:“原來是場噩夢啊……” “哼缀程!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起市俊,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤杠输,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后秕衙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蠢甲,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年据忘,在試婚紗的時候發(fā)現(xiàn)自己被綠了鹦牛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搞糕。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖曼追,靈堂內(nèi)的尸體忽然破棺而出窍仰,到底是詐尸還是另有隱情,我是刑警寧澤礼殊,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布驹吮,位于F島的核電站,受9級特大地震影響晶伦,放射性物質(zhì)發(fā)生泄漏碟狞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一婚陪、第九天 我趴在偏房一處隱蔽的房頂上張望族沃。 院中可真熱鬧,春花似錦泌参、人聲如沸脆淹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盖溺。三九已至,卻和暖如春铣缠,著一層夾襖步出監(jiān)牢的瞬間咐柜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工攘残, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拙友,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓歼郭,卻偏偏與公主長得像遗契,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子病曾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

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