程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Swift教程之字符串和字符詳解

Swift教程之字符串和字符詳解

編輯:更多關於編程

Swift教程之字符串和字符詳解。本站提示廣大學習愛好者:(Swift教程之字符串和字符詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Swift教程之字符串和字符詳解正文


一個字符串String就是一個字符序列,像”hello,world”,”albatross”如許的。Swift中的字符串是用String症結詞來界說的,同時它也是一些字符的聚集,用Character界說。

Swift的String和Character類型為代碼供給了一個疾速的,兼容Unicode的字符處理計劃。String類型的初始化和應用都是可讀的,而且和C中的strings相似。同時String也能夠經由過程應用+運算符來組合,應用字符串就像應用Swift中的其他根本類型一樣簡略。

1、字符串常量

在代碼中可使用由String事後界說的字符串常量,界說方法異常簡略:

let someString = “Some string literal value”

字符串常量可以包含上面這些特別字符:

空字符\0,反斜槓\,制表符\t,換行符\n,回車符\r,雙引號\”和單引號\'

單字節Unicode字符,\xnn,個中nn是兩個十六進制數

雙字節Unicode字符,\unnnn,個中nnnn是四個十六進制數

四字節Unicode字符,\Unnnnnnnn,個中nnnnnnnn是八個十六進制數

上面的代碼給出了這四種字符串的例子:


let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imagination is more important than knowledge" - Einstein
let dollarSign = "\x24" // $, Unicode scalar U+0024
let blackHeart = "\u2665" // ♥, Unicode scalar U+2665
let sparklingHeart = "\U0001F496" // , Unicode scalar U+1F496

2、初始化一個空串

初始化一個空串時有兩種情勢,然則兩種初始化辦法的成果都一樣,表現空串

 
var emptyString = "" // empty string literal
var anotherEmptyString = String() // initializer syntax
// these two strings are both empty, and are equivalent to each other

經由過程isEmpty屬性可以檢討一個字符串能否為空

if emptyString.isEmpty {
println("Nothing to see here")
}
// prints "Nothing to see here"

3、變長字符串

假如應用var症結詞界說的字符串即為可修正的變長字符串,而let症結詞界說的字符串是常量字符串,弗成修正。

 
var variableString = "Horse"
variableString += " and carriage"
// variableString is now "Horse and carriage"
let constantString = "Highlander"
constantString += " and another Highlander"
// this reports a compile-time error - a constant string cannot be modified

4、字符串不是指針,而是現實的值

在Swift中,一個String類型就是一個現實的值,當界說一個新的String,而且將之前的String值拷貝過去的時刻,是現實創立了一個相等的新值,而不是僅僅像指針那樣指向曩昔。

異樣在函數傳遞參數的時刻,也是傳遞的現實值,而且創立了一個新的字符串,後續的操作都不會轉變原本的String字符串。

5、字符

Swift的字符串String就是由字符Character構成的,每個Character都代表了一個特定的Unicode字符。經由過程for-in輪回,可以遍歷字符串中的每個字符:

 
for character in "Dog!" {
println(character)
}
// D
// o
// g
// !
//

你也能夠僅僅界說一個零丁的字符:

 
let yenSign: Character = "¥"

6、字符計數

應用全局函數countElements可以盤算一個字符串中字符的數目:

 
let unusualMenagerie = "Koala , Snail , Penguin , Dromedary "
println("unusualMenagerie has \(countElements(unusualMenagerie)) characters")
// prints "unusualMenagerie has 40 characters"

7、組合應用字符和字符串

String和Character類型可以經由過程應用+號相加來組分解一個新的字符串
 
let string1 = "hello"
let string2 = " there"
let character1: Character = "!"
let character2: Character = "?"
let stringPlusCharacter = string1 + character1 // equals "hello!"
let stringPlusString = string1 + string2 // equals "hello there"
let characterPlusString = character1 + string1 // equals "!hello"
let characterPlusCharacter = character1 + character2 // equals "!?"

也能夠應用+=號來組合:

 
var instruction = "look over"
instruction += string2
// instruction now equals "look over there"
var welcome = "good morning"
welcome += character1
// welcome now equals "good morning!"

8、應用字符串生成新串

經由過程現有的字符串,可使用以下辦法來生成新的字符串:

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

在下面這個例子中,起首應用multiplier這個字符串3,來作為新串的一部門,用(multiplier)添加,同時下面的例子還用到了類型轉換Double(multiplier),將盤算成果和字符串自己都作為元素添加到了新的字符串中。

9、字符串比擬

Swift供給三種辦法比擬字符串的值:字符串相等,前綴相等,和後綴相等
字符串相等
當兩個字符串的包括完整雷同的字符時,他們被斷定為相等。


let quotation = "We're a lot alike, you and I."
let sameQuotation = "We're a lot alike, you and I."
if quotation == sameQuotation {
println("These two strings are considered equal")
}
// prints "These two strings are considered equal"
//輸入”These two strings are considered equal”

前綴(prefix)相等和後綴(hasSuffix)相等

應用string 類的兩個辦法hasPrefix和hasSuffix,來檢討一個字符串的前綴或許後綴能否包括別的一個字符串,它須要一個String類型型的參數和前往一個布爾類型的值。兩個辦法都邑在原始字符串和前綴字符串或許後綴字符串之間做字符與字符之間的。

上面一個例子中,用一個字符串數組再現了莎士比亞的羅密歐與朱麗葉前兩幕的場景。


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"
]

你可使用hasPrefix 辦法和romeoAndJuliet數組 盤算出第一幕要扮演若干個場景。

 
var act1SceneCount = 0
for scene in romeoAndJuliet {
if scene.hasPrefix("Act 1 ") {
++act1SceneCount
}
}
println("There are \(act1SceneCount) scenes in Act 1")
//輸入”There are 5 scenes in Act 1”

同理,應用hasSuffix 辦法去盤算有若干個場景產生在Capulet第宅和Friar Lawrence牢房


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
}
}
println("\(mansionCount) mansion scenes; \(cellCount) cell scenes")
// 輸入 "6 mansion scenes; 2 cell scenes”

年夜小寫字符串

你可以從一個String類型的uppercaseString 和 lowercaseString中取得一個字符串的年夜寫或小寫。

 
let normal = "Could you help me, please?"
let shouty = normal.uppercaseString
// shouty is equal to "COULD YOU HELP ME, PLEASE?"
let whispered = normal.lowercaseString
// whispered is equal to "could you help me, please?"

10、Unicode

Unicode是編碼和表現文本的國際尺度。它簡直可以顯示一切說話的一切字符的尺度形狀。還可以從相似於文本文件或許網頁如許的內部源文件中讀取和修正他們的字符。

Unicode術語

每個Unicode字符都能被編碼為一個或多個unicode scalar。一個unicode scalar是一個獨一的21位數(或許稱號),對應著一個字符或許標識。例如 U+0061是一個小寫的A (“a”), 或許U+1F425是一個面向我們的黃色小雞

當一個Unicode字符串寫入文本或許其他貯存時,unicode scalar會依據Unicode界說的格局來編碼。每個格局化編碼字符都是小的代碼塊,稱成為code units.他包括UTF-8格局(每個字符串由8位的code units構成)。和UTF-16格局(每個字符串由16位的code units構成)

Unicode字符串

Swift 支撐多種分歧的方法獲得Unicode字符串.
你可使用for-in語句遍歷字符串,來取得每個字符的Unicode編碼值。這個進程曾經在字符(Working with Characters)描寫過了。
或許,上面三個描寫中應用適合的一個來取得一個字符串的值
UTF-8字符編碼單位聚集應用String類型的utf-8屬性
UTF-16字符編碼單位聚集應用String類型的utf-16屬性
21位Unicode標量聚集應用String類型的unicodeScalars屬性
上面的每個例子展現了分歧編碼顯示由 D , o , g , !

(DOG FACE, 或許Unicode標量 U+1F436)字符構成的字符串
UTF-8
你可使用String類型的utf8屬性遍歷一個UTF-8編碼的字符串。這個屬性是UTF8View類型
,UTF8View是一個8位無符號整形(UInt8)的聚集,聚集中的每個字節都是UTF-8編碼。


for codeUnit in dogString.utf8 {
print("\(codeUnit) ")
}
print("\n")
// 68 111 103 33 240 159 144 182

在下面的例子中,前4個十進制codeunit值(68,111,103,33)顯示為字符串 D , o ,g 和 ! ,和他們的ASCII編碼雷同一樣。前面4個codeunit的值(240,159,144,182)是DOG FACE字符的4字節UTF-8編碼。

UTF-16

你可使用String類型的utf16屬性遍歷一個UTF-16編碼的字符串。這個屬性是UTF16View類型,UTF16View是一個16位無符號整形(UInt16)的聚集,聚集中的每個字節都是UTF-16編碼。

 
for codeUnit in dogString.utf16 {
print("\(codeUnit) ")
}
print("\n")
// 68 111 103 33 55357 56374

同理,前4個十進制codeunit值(68,111,103,33)顯示為字符串 D , o ,g 和 ! ,他們的UTF-16 的codeunit和他們UTF-8的編碼值雷同。
第5和第6個codeunit值(55357和56374)是DOG FACE字符的UTF-16的署理對編碼。他們的值是由值為U+D83D(十進制55357)的高位署理(lead surrogate)和值為U+DC36 (十進制56374)的低位署理(trail surrogate)構成。

Unicode標量

你可使用String類型的unicodeScalars屬性遍歷一個Unicode標量編碼的字符串。這個屬性是UnicodeScalarsView類型,UnicodeScalarsView是一個UnicodeScalar類型的聚集。每個Unicode標量都是一個隨意率性21位Unicode碼位,沒有高位署理,也沒有低位署理。

每個UnicodeScalar應用value屬性,前往標量的21位值,每位都是32位無符號整形(UInt32)的值:

 
for scalar in dogString.unicodeScalars {
print("\(scalar.value) ")
}
print("\n")
// 68 111 103 33 128054

value屬性在前4個UnicodeScalar值(68,111,103,33)再一次展現編碼了字符 D , o , g 和 ! 。第五個也是最初一個UnicodeScalar 是DOG FACE字符,十進制為128054,等價於16進制的1F436,相當於Unicode標量的U+1F436。
每個UnicodeScalar可以被結構成一個新的字符串來取代讀取他們的value屬性,相似於拔出字符串。

 
for scalar in dogString.unicodeScalars { println("\(scalar) ") }
// D
// o
// g
// !
//

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved