Swift3.1_字符串

字符串字面量

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

let someString = "Some string literal value"

someString常量通過字符串字面量進行初始化,Swift會推斷該常量為String類型。

初始化空字符串

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

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

判斷該字符串是否為空:

print(emptyString.isEmpty)    // true

字符串可變性

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

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ū)別中進行了詳細描述。

public struct String {
  ...
}

如果您創(chuàng)建了一個新的字符串,那么當其進行常量、變量賦值操作,或在函數(shù)、方法中傳遞時,會進行值拷貝。 任何情況下,都會對已有字符串值創(chuàng)建新副本,并對該新副本進行傳遞或賦值操作。

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)建新字符串的方式,可以在其中包含常量、變量、字面量和表達式。 您插入的字符串字面量的每一項都在以反斜線為前綴的圓括號中:

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

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

Unicode

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

Unicode 標量

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

字符串字面量的特殊字符

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

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

訪問字符串

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

  • 第一個索引
    let string = "hello world"
    let start = string.startIndex    // String.Index 類型
    string[start]                    // 結(jié)果 h
    
  • 最后一個索引
    使用endIndex屬性可以獲取最后一個Character的后一個位置的索引。因此,endIndex屬性不能作為一個字符串的有效下標。
    string[string.endIndex]       // 越界錯誤 
    string.index(after: endIndex) // 越界錯誤 
    
  • 索引
    通過上一個索引和下一個索引獲取對應索引:
    string[string.index(after: string.startIndex)] // 第二個 e
    string[string.index(before: string.endIndex)]  // 最后一個字符 d
    
    通過偏移量獲取對應的索引:
    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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容