//在swift中 String 可以調(diào)用OC中的 NSString方法 不用進(jìn)行轉(zhuǎn)換
//字符串的字面量 可以用于為常量和變量提供初始值
let str = "hello world"
//多行字符串字面量 與oc /**/注釋相似
let string = """
a
b
c
d
e
"""
print(string)
//上面代碼中 換行已經(jīng)包含在內(nèi) 如果不想這么寫還想要有換行 用\n來代替 與oc一樣
let hh = "hello \n world"
print( hh)
//在多行中不希望有多行樣式 在""" 字符串中 每行字符串尾部用\ 來當(dāng)做續(xù)行 不是換行 """
//這樣方便可讀性
//但是""" 符號(hào)必須獨(dú)占一行才行
let hello = """
hello world duo hang \
i love the world
"""
//在多行中 以末尾"""符號(hào)位置為基準(zhǔn) 若各行有字符創(chuàng)超出了末尾 """ 則超出的部分包含在字符串中
print("""
123
456
789
""")
//超出某位的"""第一個(gè)“符號(hào) 都作為空格來處理
// print("""
// 123
// 456
// 789
// """)
//這么寫或報(bào)錯(cuò) 說是以下各行縮進(jìn)不足 所以 所有的字符串換行后 都不能超過某位的”“”位置
//轉(zhuǎn)義字符
// \0 空字符 \\反斜線 \t水平制表符 \n換行符 \r回車符 \"雙引號(hào) \'單引號(hào)
//Unicode標(biāo)量 寫成\u{n} u為小寫,n為任意一到八位十六進(jìn)制數(shù)切可用的unicode編碼
print("\"注釋 \"")
print("\u{24}")
print("\u{2665}")
print("\u{1F496}")
//若在多行字符串中使用""" 必須要用一個(gè)\符號(hào)來轉(zhuǎn)義
print("""
Escaping the first quote \"""
Escaping all three quotes \"\"\"
""")
//初始化一個(gè)空字符串
var nilStr = ""
var emptyStr = String()
//以上兩個(gè)字符串為空 且等價(jià)
//判斷字符串是否為空
if nilStr.isEmpty{
print("empty str")
}
//字符串可變性 var為變量
var variablestr = "hello"
variablestr += " world"
let str1 = "hello"
// str1 += "world"http://此時(shí)報(bào)錯(cuò) 因?yàn)閟tr1定義為常量
//for in 語句來循環(huán)輸出 字符串中沒每個(gè)字符
for 字符 in "hello world"{
print(字符)
}
//可以通過 character 來定義 并進(jìn)行字符字面量賦值,可以作為一個(gè)獨(dú)立的字符量或變量
let worldI : Character = "i"
//可以把一個(gè)字符集合 通過String來初始化成一個(gè)字符串
let chars : [Character] = ["a","b",worldI]
let charStr = String(chars)
print(charStr)
//使用加號(hào)來連接兩個(gè)字符串
let string1 = "string1"
let string2 = "string2"
var string3 = string1 + string2
// var string4 = string3 + worldI 類型不同峡蟋,不能相加
let string5 : NSString = "oc"
// var string6 = string3 + string5 類型不同 得強(qiáng)轉(zhuǎn)
var string6 = string3 + (string5 as String)
print(string3,string6)
//使用+= 來將一個(gè)字符串添加到一個(gè)已經(jīng)存在的字符串變量上
var string7 = "default"
string7 += string6
//使用append 將一個(gè)字符追加到一個(gè)字符串的尾部 也可以是字符串 append方法可以追加很多
let charchar : Character = "i"
string7.append(charchar)
string7.append(string1)
//Unicode 用于文本的編碼和表示 可以用標(biāo)準(zhǔn)格式表示來自任意語言幾乎所有的在字符轧拄,并能夠?qū)ξ谋净蚓W(wǎng)頁這樣的外部資源中的在字符進(jìn)行讀寫操作,Swift的string 和 character 類型是完全兼容Unicode
//Unicode標(biāo)量
//Swift 的string類型是基于Unicode標(biāo)量簡歷的是钥。Unicode標(biāo)量是對應(yīng)字符或者修飾符的唯一的21位數(shù)字
//Unicode碼位的范圍 U+0000 到 U+D7FF 或者 U+E000 到 U+10FFFF
//Unicode標(biāo)量不八廓Unicode代理項(xiàng)碼位 范圍是 U+D800 到 U+DFFF
//不是所有的21位Unicode 標(biāo)量都代表一個(gè)字符
//單一標(biāo)量
let eacute : Character = "\u{E9}" //é
//兩個(gè)標(biāo)量字形群
let combineddeacute : Character = "\u{65}\u{301}"
print(eacute,combineddeacute)
//單一標(biāo)量
let precomposed : Character = "\u{D65c}"
//組合標(biāo)量排序 為同一個(gè)字
let decomposed : Character = "\u{1112}\u{1161}\u{11AB}"
print(precomposed,decomposed)
//測試標(biāo)量組合 不能顛倒
// let teststr : Character = "\u{1161}\u{1112}\u{11AB}"
// print(teststr)
//可擴(kuò)展的字符群可以使包圍記號(hào) U+20DD 標(biāo)量包圍其他Unicode標(biāo)量鳖宾,作為一個(gè)單一的character值
print("\u{E9}\u{20DD}") //é? 圓形包含
//地域性指示符號(hào)Unicode 標(biāo)量可以組合成一個(gè)單一的character值
// US 符號(hào) 組合 U (U+1F1FA) S (S+1F1F8)
print("\u{1F1FA}\u{1F1F8}") //???? 美國國旗
//字符數(shù)量 用count 來知道字符串內(nèi)含有多少個(gè)字符
let teststring = "hello world"
print("teststring has \(teststring.count) charracter")
//使用字符群集作為 character值來改變字符串時(shí)瑞信,并不一定會(huì)改變字符串?dāng)?shù)量
var word = "cafe"
print(word + "has \(word.count) character")
word += "\u{301}"
print("\(word) has \(word.count) character")
//NSString 的 length數(shù)量 與 Unicode 數(shù)量并不總是是相同
//NSString 是 UTF-16表示的單元數(shù)字
//Swift string值關(guān)聯(lián)的索引類型 string.index 對應(yīng)每個(gè)character的位置
//Swift 中 字符串不能用 integer做索引
//用startIndex 獲取一個(gè)string 的第一個(gè)character索引 使用endIndex獲取最后一個(gè)character位置的索引
//但是 endIndex不能作為一個(gè)字符串的郵箱下標(biāo) 如果 stirng 為空串 startindex 與endindex相等
//可以使用 string index(before:)獲取某一下標(biāo)前面 index(after:)獲取某一下標(biāo)后面 index(_:offsetby:)獲取某一下標(biāo)的偏移量 避免多次使用前兩個(gè)
//三種方法也可以用在 array dictionary set中
let indexString = "hello world"
print(indexString[indexString.startIndex])
// print(indexString[indexString.endIndex]) 代碼出錯(cuò) 因?yàn)閑ndindex 為字符串最后一個(gè)字符末尾 往后一位為空字符
print(indexString[indexString.index(before: indexString.endIndex)]) //d
print(indexString[indexString.index(after: indexString.startIndex)]) //e
print(indexString[indexString.index(indexString.startIndex, offsetBy: 5)]) //因?yàn)榭崭?所以看不出來
print(indexString[indexString.index(indexString.startIndex, offsetBy: 6)]) //w
//indices 為字符串所有索引范圍 range 用來訪問單個(gè)字符 indices 目錄
for indexx in indexString.indices{
// print(indexString[indexx])
print(indexString[indexx], separator:"-", terminator: " ") //由于打印的是單個(gè)字符 所以連接符沒有起到作用
//terminator 默認(rèn)是添加換行符光羞,若果換成別的 就不起到換行效果,會(huì)連接下個(gè)print語句打印的內(nèi)容
}
print(indexString.indices)
//插入
var welcome = "welcome"
//在末尾加一個(gè)感嘆號(hào) 在一個(gè)指定索引加一個(gè)單個(gè)字符
welcome.insert("!", at: welcome.endIndex)
print(welcome)
//在感嘆號(hào)前加一段 字符串 在一個(gè)指定索引加一段字符串
welcome.insert(contentsOf: " to China", at: welcome.index(before: welcome.endIndex))
print(welcome)
//刪除某個(gè)下標(biāo)的字符
welcome.remove(at: welcome.index(before: welcome.endIndex))//刪除感嘆號(hào)
print(welcome)
//刪除一端 指定范圍的字符串
welcome.removeSubrange(welcome.index(welcome.endIndex, offsetBy: -8)..<welcome.endIndex)//刪除to china
print(welcome)
//子字符串
let testSTR = "hello,world"
let index_ = testSTR.index(of: ",") ?? testSTR.endIndex //義為 字符串testSTR 中有”,“ 這個(gè)字符下標(biāo)嗎 有的話就用這個(gè)字符下標(biāo) 怀大,沒有的話 就用末尾下標(biāo)
let fix = testSTR[..<index_] //往字符串里傳一個(gè)范圍 返回這個(gè)范圍內(nèi)的所以字符串
//此時(shí) fix 為substring類型的實(shí)例 需要另起一個(gè)string 類型的 去接收以便長久化
let newFix = String(fix)
print(fix,newFix)//hello hello
//string 與substring 區(qū)別在于性能優(yōu)化上纱兑,substring 可以重用原string 的內(nèi)存空間,或者另一個(gè)substring,string也一樣
//意味著在修改string 和substring 之前都不需要消耗內(nèi)存去復(fù)制內(nèi)存化借∏鄙鳎可以直接修改
//疑問 若果修改substring 會(huì)不會(huì)修改原string
var sourstr = "helloworld"
var substr = String(sourstr[sourstr.startIndex..<sourstr.index(sourstr.startIndex, offsetBy: 5)])
print(substr)
substr = "welcome"
print(sourstr) //事實(shí)不會(huì)
//string 與substring 都可以調(diào)用 stringprotocol的函數(shù)
//字符串比較 三種比較方式 字符串字符相等,前綴和后綴相等
let me = "i like you"
let me1 = "i like you"
let you = "you like i" //me
if me == me1{
print("same string")
}
//如果兩個(gè)字符串的可擴(kuò)展字形集群是相等的蓖康,那它們就是相等的铐炫,在這個(gè)情況下,即使可擴(kuò)展的字形集群集是有不同的Unicode標(biāo)量構(gòu)成的蒜焊,只要它們有相同的語言意義和外觀倒信,就認(rèn)為它們標(biāo)準(zhǔn)相等
//ex:
let e = "\u{E9}"
let oe = "\u{65}\u{301}"
if e == oe {
print("same string")
}
let arrar = ["abc","abd","abe","bbc","bbd","bbe"]
var sameprefix = 0
var samesuff = 0
for str in arrar{
if str.hasPrefix("a"){
sameprefix += 1 //md 不能用++ 來代表自加
}else if str.hasSuffix("c"){
samesuff += 1
}
}
print("arr has \(sameprefix) sameprefix , has \(samesuff) suff")
//字符串的Unicode表示形式
//每一個(gè)字符串中的小塊編碼都被稱作代碼單元,這些包括UTF-8編碼格式(編碼字符為8位的代碼單元) UTF-16 UTF-32
//其中 21位的Unicode 標(biāo)量值集合泳梆,也是字符串的UTF-32編碼格式
//可以通過string 的 utf8屬性來訪問它的UTF-8表示 鳖悠。
//為 string.UTF8View 值為無符號(hào)8位(Uint8)的集合 每一個(gè)Uint8值都是一個(gè)字符UTF-8表示
//使用為字符串.utf8
let dogstr = "a little dog"
for codeUint in dogstr.utf8{
print("\(codeUint)",terminator:" ")
}
//輸出為97 32 108 105 116 116 108 101 32 100 111 103
//字母部分與ASCII表示相同
for codeUint in dogstr.utf16{
print("\(codeUint)",terminator:" ")
}
//Unicode的標(biāo)量表示 通過string unicodescalars 來訪問標(biāo)量表示 其為UnicodeScalarView 類型屬性榜掌,
//UnicodeScalarView 為UnicodeScalar類型的集合
let bigDog = "dog!!??"
for scalar in bigDog.unicodeScalars{
print(scalar.value,terminator:" ")// .value 就是.UInt32
}
//其實(shí)似懂非懂,主要還是想知道用在何處乘综,鍵盤憎账?火星文輸入法?自定義字的組合卡辰?
Swift 4.0學(xué)習(xí)之旅—字符串和字符
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門森渐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冒晰,你說我怎么就攤上這事同衣。” “怎么了壶运?”我有些...
- 文/不壞的土叔 我叫張陵耐齐,是天一觀的道長。 經(jīng)常有香客問我蒋情,道長埠况,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任棵癣,我火速辦了婚禮辕翰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狈谊。我一直安慰自己喜命,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布河劝。 她就那樣靜靜地躺著壁榕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赎瞎。 梳的紋絲不亂的頭發(fā)上牌里,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼因妙!你這毒婦竟也來了痰憎?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對情侶失蹤攀涵,失蹤者是張志新(化名)和其女友劉穎铣耘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體以故,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜗细,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怒详。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炉媒。...
- 正文 年R本政府宣布白粉,位于F島的核電站,受9級(jí)特大地震影響鼠渺,放射性物質(zhì)發(fā)生泄漏鸭巴。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一拦盹、第九天 我趴在偏房一處隱蔽的房頂上張望鹃祖。 院中可真熱鬧,春花似錦掌敬、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至地熄,卻和暖如春华临,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背端考。 一陣腳步聲響...
- 正文 我出身青樓扶供,卻偏偏與公主長得像筛圆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子椿浓,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 定義字符串常量(常量只有讀操作) 定義字符串變量 賦值 字符串分割 字符串截取 1太援、string.startInd...
- 貼夜色的謐靜, 月光聽到萬物沉睡的呼吸扳碍, 獨(dú)醒為一朵蓮花提岔, 風(fēng)曳著雨露,靜等黎明 一團(tuán)看不見的渦流笋敞, 灰濛著霞光碱蒙,...
- contentSize、contentInset和contentOffset 是UIScrollView三個(gè)基本的...