Swift 3.0之三畴蹭、字符串和字符

1. 字符串字面量

let someString = "Some string literal value"
// someString 常量被推斷類型為 String

2. 空字符串的初始化

兩種方式,舉個(gè)栗子?? :

var emptyString = ""               // 方式一 
var anotherEmptyString = String()  // 方式二
// 兩種方式都初始化為一個(gè)空字符串断盛,即 “”弯予。

通過(guò)檢查字符串常量或變量的isEmpty屬性來(lái)確認(rèn)一個(gè)String值是否為空:

if emptyString.isEmpty {
    print("Nothing to see here")
}
// 結(jié)果為: "Nothing to see here"

3. 字符串可變性

String常量不可修改值;
String變量 可以修改值刊棕。

4. 字符串是值類型

值類型意味著炭晒,每一次賦值,拿到的都是String對(duì)象的拷貝甥角,而非對(duì)象本身网严。 (淺拷貝)

5. 字符類型 (Character)

  • 用字符串字面量初始化一個(gè)Character類型的變量:
let exclamationMark: Character = "!"
  • for...in語(yǔ)句遍歷String類型對(duì)象,打印所有字符嗤无,舉個(gè)?? :
for character in "Dog!?".characters {
    print(character)
}
// D
// o
// g
// !
// ?
  • 用字符數(shù)組初始化一個(gè)字符串:
let catCharacters: [Character] = ["C", "a", "t", "!", "??"] // 初始化一個(gè)字符數(shù)組
let catString = String(catCharacters)                       // 將數(shù)組轉(zhuǎn)化為字符串
print(catString)                                            // 結(jié)果為: "Cat!??"

6. 連接字符串或字符

舉個(gè)?? :

let string1 = "hello"
let string2 = " there"
var welcome = string1 + string2
// welcome 現(xiàn)在為 "hello there"

上面的?? 也可以簡(jiǎn)寫為下面的 ?? :

var instruction = "look over"
instruction += string2
// instruction 現(xiàn)在為 "look over there"

字符串后追加字符, 使用append(_)函數(shù):

let exclamationMark: Character = "!"
welcome.append(exclamationMark)
// welcome 現(xiàn)在為 "hello there!"

7. 字符串插值

一個(gè)反斜杠 \ 加上一枚小括號(hào)() 等于 \(), 舉個(gè)?? :

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

8. 字符串的字符統(tǒng)計(jì)

let unusualMenagerie = "Koala ??, Snail ??, Penguin ??, Dromedary ?? "
print("unusualMenagerie has \(unusualMenagerie.characters.count) characters")
// 'unusualMenagerie.characters' 為字符串的字符數(shù)組震束,然后取其count值,即此字符串的字符數(shù)量当犯。
// 結(jié)果為: "unusualMenagerie has 40 characters"

9. 訪問(wèn)和修改字符串

字符串索引

每一個(gè)String值都有索引類型垢村,String.Index,它相當(dāng)于每個(gè)Character在字符串中的位置嚎卫。使用startIndex屬性來(lái)訪問(wèn)String中第一個(gè)Character的位置:

let greeting = "Guten Tag!"
greeting[greeting.startIndex]  // G

endIndex屬性是 String中最后一個(gè)字符再往后一位的位置肝断。因此,endIndex屬性并不是字符串下標(biāo)腳本的合法實(shí)際參數(shù)。如果String為空胸懈,則 startIndexendIndex相等担扑。

使用 index(before:)index(after:) 方法來(lái)訪問(wèn)給定索引的前或后一個(gè)位置:

greeting[greeting.index(before: greeting.endIndex)]
// !
greeting[greeting.index(after: greeting.startIndex)]
// u

使用index(_:offsetBy:)方法訪問(wèn)偏離第一個(gè)參數(shù)某個(gè)長(zhǎng)度的位置:

let index = greeting.index(greeting.startIndex, offsetBy: 7)
greeting[index]
// a

嘗試訪問(wèn)索引位置在字符串范圍之外,就會(huì)觸發(fā)運(yùn)行時(shí)錯(cuò)誤:

greeting[greeting.endIndex]     // error
greeting.index(after: endIndex) // error

字符串characters屬性是一個(gè)字符數(shù)組趣钱,數(shù)組的indices(index的復(fù)數(shù)形式)屬性涌献,代表字符串的索引數(shù)組:

for index in greeting.characters.indices {
    print("\(greeting[index]) ", terminator: " ")
}
// 結(jié)果為: "G u t e n   T a g ! "

插入和刪除

插入字符,使用insert(_:at:)方法首有,
插入字符串燕垃,使用insert(contentsOf:at:)方法:

var welcome = "hello"
welcome.insert("!", at: welcome.endIndex)
// welcome 現(xiàn)在為 "hello!"
 
welcome.insert(contentsOf:" there".characters, at: welcome.index(before: welcome.endIndex))
// welcome 現(xiàn)在為 "hello there!"

移除某個(gè)位置字符,使用remove(at:)方法井联,
移除某段位置字符卜壕,使用removeSubrange(_:)方法:

welcome.remove(at: welcome.index(before: welcome.endIndex))
// welcome 現(xiàn)在為 "hello there"
 
let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.removeSubrange(range)
// welcome 現(xiàn)在為 "hello"

任何遵循RangeReplaceableIndexable協(xié)議的類型都可使用insert(_:at:)insert(contentsOf:at:)烙常,remove(at:)方法轴捎,包括 String類型,還有集合類型如 : Array蚕脏,DictionarySet侦副。

10. 字符串比較

字符串和字符相等性

字符串比較使用“等于”運(yùn)算符 (==) 和“不等”運(yùn)算符 (!=)進(jìn)行檢查:

let quotation = "We're a lot alike, you and I."
let sameQuotation = "We're a lot alike, you and I."
if quotation == sameQuotation {
    print("These two strings are considered equal")
}
// 結(jié)果為: "These two strings are considered equal"

前綴和后綴相等性

要檢查一個(gè)字符串是否擁有特定的字符串前綴或者后綴,調(diào)用字符串的hasPrefix(_:)hasSuffix(_:)方法驼鞭,返回一個(gè)布爾值秦驯。舉個(gè)羅密歐與朱麗葉的?? :

let romeoAndJuliet = [
    "Act 1 Scene 1: Verona, A public place",
    "Act 1 Scene 2: Capulet's mansion",
    "Act 1 Scene 3: A room in Capulet's mansion",
    "Act 1 Scene 4: A street outside Capulet's mansion",
    "Act 1 Scene 5: The Great Hall in Capulet's mansion",
    "Act 2 Scene 1: Outside Capulet's mansion",
    "Act 2 Scene 2: Capulet's orchard",
    "Act 2 Scene 3: Outside Friar Lawrence's cell",
    "Act 2 Scene 4: A street in Verona",
    "Act 2 Scene 5: Capulet's mansion",
    "Act 2 Scene 6: Friar Lawrence's cell"
]
// 初始化數(shù)組

使用hasPrefix(_:)方法計(jì)算數(shù)組中前綴為"Act 1"的數(shù)量:

var act1SceneCount = 0
for scene in romeoAndJuliet {
    if scene.hasPrefix("Act 1 ") {
        ++act1SceneCount
    }
}
print("There are \(act1SceneCount) scenes in Act 1")
// 結(jié)果為: "There are 5 scenes in Act 1"

使用hasSuffix(_:)方法計(jì)算數(shù)組中后綴為"Capulet’s mansion"和"Friar Lawrence’s cell"的數(shù)量:

var mansionCount = 0
var cellCount = 0
for scene in romeoAndJuliet {
    if scene.hasSuffix("Capulet's mansion") {
        ++mansionCount
    } else if scene.hasSuffix("Friar Lawrence's cell") {
        ++cellCount
    }
}
print("\(mansionCount) mansion scenes; \(cellCount) cell scenes")
// 結(jié)果為: "6 mansion scenes; 2 cell scenes"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挣棕,隨后出現(xiàn)的幾起案子译隘,更是在濱河造成了極大的恐慌,老刑警劉巖洛心,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件固耘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡皂甘,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門悼凑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)偿枕,“玉大人,你說(shuō)我怎么就攤上這事户辫〗タ洌” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵渔欢,是天一觀的道長(zhǎng)墓塌。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么苫幢? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任访诱,我火速辦了婚禮,結(jié)果婚禮上韩肝,老公的妹妹穿的比我還像新娘触菜。我一直安慰自己,他們只是感情好哀峻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布涡相。 她就那樣靜靜地躺著,像睡著了一般剩蟀。 火紅的嫁衣襯著肌膚如雪催蝗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天育特,我揣著相機(jī)與錄音丙号,去河邊找鬼。 笑死且预,一個(gè)胖子當(dāng)著我的面吹牛槽袄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锋谐,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼遍尺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了涮拗?” 一聲冷哼從身側(cè)響起乾戏,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎三热,沒想到半個(gè)月后鼓择,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡就漾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年呐能,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抑堡。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡摆出,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出首妖,到底是詐尸還是另有隱情偎漫,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布有缆,位于F島的核電站象踊,受9級(jí)特大地震影響温亲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杯矩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一栈虚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧菊碟,春花似錦节芥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至魄幕,卻和暖如春相艇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纯陨。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工坛芽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人翼抠。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓咙轩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親阴颖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子活喊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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