Swift入门(二)——字符与字符串

Swift字符

定义

Swift中的字符,与OC有些不同,每一个字符代表了一个可拓展的字母集,可拓展的字母集由若干个(大于等于一个)Unicode标量值表示,这些标量构成了一个可拓展的字母集,也就是一个人类可读的字符。

Unicode标量

一个Unicode标量占据21个比特位,一般格式为“U+xxxx”,这个解释有点抽象,其实我们通常理解的一个字母,也可以用一个Unicode标量来表示,比如字母’a’可以表示为”U+0061”。

刚刚说到,一个字符由若干个Unicode标量表示,比如以下这个例子:

let combine1 = "\u{1112}"
let combine2 = "\u{1112}\u{1161}"
let combine3 = "\u{1112}\u{1161}\u{11AB}"

println("combine1 = \(combine1)")
println("combine2 = \(combine2)")
println("combine3 = \(combine3)")

输出结果是

combine1 = ?

combine2 = ??

combine3 = ???

可见,对于一个字符,并不一定是由一个Unicode标量构成的。比如“???”。

字符类型推导

刚刚的例子中,我们定义了三个常量,combine0,,combine1,combine2,他们被推导为什么类型呢?答案是String类型而不是Character类型,个人猜测是Swfit的宽类型优先导致的。这里通过简单的代码验证一下:

var combine0 = "\u{1112}"
var combine1:Character = "\u{1112}"

combine0 += "abc" //正确
combine1 += "abc" //编译错误:无法将String类型与Character类型变量拼接

字符拼接

在初始化字符类型常量或变量时,Swift会自动把能够拼接的Unicode标量拼接成一个人类可读字符,如果不能拼接,将生成一个由多个字符所组成的字符串。把这个值赋给一个已经标注为Character类型的变量会导致编译错误。

var string = "\u{1112}\u{10FFFF}" //正确,string变量被推导为String类型
var c:Character = "\u{1112}\u{10FFFF}" //错误,无法赋值给Character类型变量

Swift字符串

定义

Swift中的字符串由若干个字符构成。

字符串初始化

一共有两种方式可以进行字符串初始化,代码如下:

var emptyString1 = ""
var emptyString2 = String()

这样就创建了一个空字符串,可以用字符串的isEmpty属性来检验:

if emptyString1.isEmpty{
    println("emptyString1 is empty")
}
if emptyString2.isEmpty{
    println("emptyString2 is empty")
}

输出结果是:

emptyString1 is empty
emptyString2 is empty

字符串拼接

字符串之间可以相加,等号左侧必须是变量,不能是常量。

字符串变量还可以调用append方法连接其他字符。需要注意的是,append方法只能连接字符,不能连接字符串。

var combine1 = "\u{1112}"
let combine2 = "\u{1112}\u{1161}"

combine1 += combine2 //正确
combine2 += combine1 //错误

var char:Character = "a"
combine1.append(char) //正确
combine1.append("a") //即使写成这样也会报错,原因不明,可能是推导为String类型了

字符串计数

由于一个字符由若干个Unicode标量组成,所以无法使用字符串大小除以单个字符串大小来计算字符串长度。可以利用count方法来计算字符串长度:

let stringValue1 = "Hello, world"
let stringValue2 = "\u{65}\u{301}"
println("string1 length = \(count(stringValue1))")
println("string2 length = \(count(stringValue2))")
println("string2 = \(stringValue2)")

之前说过字符的自动拼接,所以运行结果如下:

string1 length = 12

string2 length = 1

string2 = e?

字符串内插

这个类似于OC中的NSString stringWithFormat方法。可以通过已有字符串或数字等其他变量构建一个新的字符串,通过一个例子演示一下:

var number = 3
var time = 2
var setence = "\(number)的 \(time)倍是 \(number * time)"
println("setence = \(setence)")

对应到OC的方法,就相当于用”\()”替换了”%@”。

需要注意的是,内插的表达式中不能直接包含双引号、单引号或者反斜杠。

字符串比较

通过 == 和 != 运算符来比较字符串是否相等

比较特殊的一点是,swift在比较两个字符串时,并不会逐一比较每个Unicode标量是否相等,而是会根据字符串的实际语义来比较。所以在下面的例子中,比较结果需要特别留心一下:

var compare1 = "caf\u{E9}" //\u{E9}是带声调的e,形如e?
var compare2 = "caf\u{65}\u{301}" //这是字母e加上声调合成的e?
if compare1 == compare2{
    //它们依然是相等的
    println("\(compare1) is equal to \(compare2)")
}

var compare3 = "\u{41}" //拉丁字母A
var compare4 = "\u{0410}" //斯拉夫字母A
if compare3 != compare4{
    //虽然表现相同,但实际语义不同,所以字符串依然不同
    println("\(compare3) is not equal to \(compare4)")
}

运行结果如下:

café is equal to cafe?

A is not equal to А

字符串前后缀

字符串有hasPrefix和hasSuffix方法,用于判断这个字符串是否包含某个前(后)缀,返回一个Bool类型值。注意这两个方法是区分大小写的

var preFixAndSuffix = "Hello World"
if preFixAndSuffix.hasPrefix("H"){
    println("\(preFixAndSuffix) has prefix \"H\"")
}
if preFixAndSuffix.hasPrefix("h"){
    println("\(preFixAndSuffix) has prefix \"h\"")
}
if preFixAndSuffix.hasSuffix("rld"){
    println("\(preFixAndSuffix) has suffix \"rld\"")
}
if preFixAndSuffix.hasSuffix("rldd"){
    println("\(preFixAndSuffix) has suffix \"rldd\"")
}

输出结果:

Hello World has prefix "H"
Hello World has suffix "rld"

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 04:09:16

Swift入门(二)——字符与字符串的相关文章

swift笔记 (三) —— 字符和字符串

字符串和字符 苹果要是不提供了unicode的字符串和字符,那就是他们公司全部人的脑袋都被门夹过 他自己家都要发非常多国家的版本号的软件,怎么可能不用unicode呢 此处略去30字... 这里能够拿出来说的.也就是 Swift的 String支持全部的NSString的api String中能够包括一些特殊字符: \0 (空字符)  \\ (反斜线)  \t (tab) \n (换行符)  \r (回车符)  \" (双引號)  \' (单引號) 还能够包括: 单字节 unicode 字符 \

IOS开发语言Swift入门连载---字符串和字符

字符串和字符 String是例如"hello, world","海贼王" 这样的有序的Character (字符)类型的值的集合,通过String 类型来表示. Swift的String 和Character 类型提供了一个快速的,兼容 Unicode 的方式来处理代码中的文本信息. 创建和操作字符串的语法与 C 语言中字符串操作相似,轻量并且易读. 字符串连接操作只需要简单地通过+号将两个字符串相连即可. 与 Swift 中其他值一样,能否更改字符串的值,取决于其

Swift入门(十二)——利用Extension添加逆序输出字符串方法

Swift好像没有自带逆序输出字符串的方法,于是决定通过拓展(Extension)给String类添加一个逆序输出字符串的reverse方法. 首先新建一个Swift文件,命名规则不太清楚,于是暂且模仿OC叫做String+Operation吧,然后实现我们需要拓展的方法.下面先贴上代码,然后解释一下这段代码. //String+Operation.swifft import Foundation //逆序输出swift中的字符串 extension String{ func Reverse()

Swift入门篇-字符串和字符

今天主要是介绍一下字符串的用法 ,字符串的语法和object-c语法不太一样,但是思想是一样,就是写法不太一样.如果您对.net和java语法比较熟悉的话,那您几乎没有深压力.如果您对swift 基本类型不是清楚,请查阅. Swift入门篇-基本类型(1) Swift入门篇-基本类型(2) Swift入门篇-基本类型(3) 一:创建空字符串 //-------------定义一个空字符串第一种方法 var str1="" //-------------定义一个空字符串第二种方法 var

Swift入门教程:基本语法(二)

数字格式 数字可以增加额外的格式,使它们更容易阅读 可以增加额外的零 0 let money = 001999           // 1999 let money2 = 001999.000   // 1999.0 可以增加额外的下划线 _ ,以增强可读性 let oneMillion1 = 1_000_000    // 1000000 let oneMillion2 = 100_0000      // 1000000 let overOneMillion = 1_000_000.000

Python入门(二)——IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化

Python入门(二)--IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化 我们从今天就开始正式的学习PY交易了,PY交易还行,我们有基础之后学习起来倒不是说那么的被动,我学习的是Python2.7,虽然现在随着版本的迁移至Python3,但是这个并不会对我们造成什么困扰,毕竟只是一个适应阶段 我们的学习资料:廖雪峰官方网站Python2.7教程 一.IDE选择PyCharm 我们虽然在前面一章已经配置过,但是我们还是有很多的IDE可以开发Py,比如su

Swift 字符于字符串

Swift 的 String 和 Character 类型??供了一个快速的,兼容 Unicode 的方式来处理代码 字符串常量 let strTest = "I'm Swift" 字符串空值判断 let emptyString = "" if emptyString.isEmpty { 2. println("Nothing to see here") 3. } 字符串可变性.字符串的可变性是通过var还是let来确定的.var表示是可变字符串

Swift字符与字符串

学习来自<极客学院:Swift中的字符串和集合> 工具:Xcode6.4 直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会 1 import Foundation 2 3 4 /*******************字符********************/ 5 /* 6 1.单个字符来指定字符常量,如“A”.“9” 7 2.转义字符表示特殊字符常量,如“\n”.“\t” 8 3.使用 \u{n} 的Unicode形式,n代表一个1-8位的十六进制数 9 4.必须用双引号

一起talk C栗子吧(第一百七十九回:C语言实例--字符和字符串输出函数二)

各位看官们,大家好,上一回中咱们说的是字符和字符串输出函数的例子,这一回咱们继续说该例子.闲 话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中介绍了字符和字符串输出函数的用法,満篇都是理论,古语云:纸上得来终觉浅,绝知此事要躬行.这一回中我们要把这些纸上得来理论应用于实践中,让我们一起动手去实践吧. 接下来,我们将通过具体的代码来说明如何使用字符输出函数,以及使用时的注意事项: int main() { char ch = 'a'; char *str = "hello