跳转至

字符串和字符

字符串和字符串

目录


1.创建字符串

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

  • 转义字符
  • Unicode标量,写成\u{n}(u为小写),其中n为任意的1到8位十六进制数。
1
2
3
4
5
let wiseWords = "\"我是要成为海贼王的男人\" - 路飞"
// "我是要成为海贼王的男人" - 路飞
let dollarSign = "\u{24}"             // $,  Unicode 标量 U+0024
let blackHeart = "\u{2665}"           // ♥,  Unicode 标量 U+2665
let sparklingHeart = "\u{1F496}"  // 💖, Unicode 标量 U+1F496

创建一个空字符串作为初始值,可以将空的字符串赋给变量,也可以初始化一个新的String实例。

1
2
3
var emptyString = ""               // 空字符串字面量
var anotherEmptyString = String()  // 初始化 String 实例
// 两个字符串均为空并等价。

2.使用字符

通过调用全局count函数,可以获取该字符串的字符数量

1
2
3
4
5
let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"

println("unusualMenagerie has \(count(unusualMenagerie)) characters")

//输出 unusualMenagerie has 40 characters

Swift的String类型表示特定序列的Character类型值的集合。每个字符值代表一个Unicode字符。可以利用for-in循环来遍历字符串中的每个字符。

1
2
3
4
5
6
7
8
for character in "Dog!🐶"{
    println(character)
}
//D
//o
//g
//!
//🐶

3.使用字符串

3.1连接字符串

字符串可以通过加法运算符(+)相加在一起并创建一个新的字符串。

1
2
3
4
let string1 = "hello"
let string2 = " there"
var welcome = string1 + string2
// welcome 现在等于 "hello there"

也可以通过赋值运算符(+=)将一个字符串添加到一个已经存在字符串变量上

1
2
3
var instruction = "look over"
instruction += string2
// instruction 现在等于 "look over there"
你可以用将append方法将一个字符附加到一个字符串变量的尾部:

1
2
3
let exclamationMark: Character = "!"
welcome.append(exclamationMark)
// welcome 现在等于 "hello there!"

3.2字符串插值

字符串插值是一种构建新字符串的方式,可以在其中包含**常量、变量、字面量**和表达式。你插入的字符串字面量的每一项都被包裹在以反斜线为前缀的圆括号中。

3.3字符串是值引用类型

Swift的String类型是值类型。如果你创建了一个新的字符串,那么当其进行常量、变量赋值操作或在函数/方法中传递时,会进行值拷贝。任何情况下,都会对已有字符串值创建新副本,并对新副本进行传递或者赋值操作。

3.4比较字符串

Swift提供了三种方式来比较字符串的值

  • 字符串相等
  • 前缀相等
  • 后缀相等
1
2
3
4
5
6
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")
}
// 输出 "These two strings are considered equal"

通过调用字符串的hasPrefix和hasSuffix方法来检查字符串是否拥有特定前缀和后缀。两个方法均需要以字符串作为参数传入并传出Boolean值得。

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

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"


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"

评论