Swift3.1_字符串

2018-02-20  本文已影响12人  Carson_Zhu

字符串字面量

您可以在您的代码中包含一段预定义的字符串值作为字符串字面量。字符串字面量是由双引号""包裹着的具有固定顺序的文本字符集。 字符串字面量可以用于为常量和变量提供初始值:

let someString = "Some string literal value"

someString常量通过字符串字面量进行初始化,Swift会推断该常量为String类型。

初始化空字符串

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

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

判断该字符串是否为空:

print(emptyString.isEmpty)    // true

字符串可变性

您可以通过将一个特定字符串分配给一个变量来对其进行修改,或者分配给一个常量来保证其不会被修改

var variableString = "hello"
variableString += " world"
// variableString 现在为 "hello world"

let constantString = "hello"
constantString += " world"
// 这会报告一个编译错误 (compile-time error) - 常量字符串不可以被修改。

字符串是值类型

String的定义就是一个结构体,结构体是值类型。在Swift中struct和class的区别中进行了详细描述。

public struct String {
  ...
}

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

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的数组作为自变量来初始化:

let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]
let catString = String(catCharacters)    // "Cat!🐱"

还可以判断字符串是否包含字符:

catString.contains("a")    // true

获取字符个数:

catString.characters.count    // 5

连接字符串和字符

通过加法运算符+连接在一起创建一个新的字符串:

let string1 = "hello"
let string2 = " world"
let welcome = string1 + string2    // welcome 现在等于 "hello world"

通过加法赋值运算符+=将一个字符串添加到一个已经存在字符串变量上:

var string = "hello"
string += " world"    // string 现在等于 "hello world"

append()方法将一个字符附加到一个字符串变量的尾部:

var string = "hello world"
let ch: Character = "!"
string.append(ch)    // string 现在等于 "hello world!"
string.append("...") // string 现在等于 "hello world!..."

字符串插值

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

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

注意:
插值字符串中写在括号中的表达式不能包含非转义反斜杠\,并且不能包含回车或换行符。不过,插值字符串可以包含其他字面量。

Unicode

Unicode是一个国际标准,用于文本的编码和表示。 它使您可以用标准格式表示来自任意语言几乎所有的字符,并能够对文本文件或网页这样的外部资源中的字符进行读写操作。SwiftStringCharacter类型是完全兼容Unicode标准的。

Unicode 标量

SwiftString类型是基于Unicode标量建立的。Unicode标量是对应字符或者修饰符的唯一的21位数字,注意不是所有的21Unicode标量都代表一个字符,因为有一些标量是留作未来分配的。

字符串字面量的特殊字符

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

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值都有一个关联的索引index类型,String.Index它对应着字符串中的每一个Character的位置。

修改字符串

插入
var welcome = "hello"

welcome.insert("!", at: welcome.endIndex)
// welcome 变量现在等于 "hello!"

welcome.insert(contentsOf:" world".characters, at: welcome.index(before: welcome.endIndex))
// welcome 变量现在等于 "hello world!"
删除
welcome.remove(at: welcome.index(before: welcome.endIndex))
// welcome 现在等于 "hello world"

let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.removeSubrange(range)
// welcome 现在等于 "hello"
替换
var welcome = "hello world"
let range = welcome.index(welcome.startIndex, offsetBy: 6)..< welcome.endIndex
welcome.replaceSubrange(range, with: "Swift")
// welcome 现在等于 "hello Swift"

前缀、后缀相等

let string = "hello world"
string.hasPrefix("a")    // false
string.hasSuffix("d")    // true

大小写切换

string.lowercased()
string.uppercased()

字符串转数组

let string = "a,b,c,d"
string.components(separatedBy: ",")    // ["a", "b", "c", "d"]
上一篇下一篇

猜你喜欢

热点阅读