字符和字符串—Swift学习笔记(六)
2014-06-20 16:16
211 查看
注:本文为自己学习The Swift Programming Language的笔记,其中的例子为引用原书和其他博文或自己原创的。每个例子都会批注一些实践过程中的经验或思考总结。
1.基础
Swift支持String字符串类型和Charater字符类型来提供一个快速的、支持Unicode编码的方式来处理字符操作。
Swift的String类型和Objective-C的NSString无缝接合,所有NSString的API对String同样适用。但是String变量总是可变长的,而在Objective-C中变长字符串是NSMutableString。
Swift字符串是传值类型,在传入函数参数或者赋值时,它是新建一个原来字符串的拷贝,而不是分配一个指针,新建字符串和原来的字符串并不储存在同一个空间。区别于Objective-C中NSString,后者是传址类型,即相当于一个指针。
Character字符类型同样用双引号把字符括起来,每一个字符代表一个独立的Unicode字符,字符串相当于Character的一个集合。
字符串和字符之间可以两两连接,使用最简单的运算符+,+=同样适用。
2.字符串字面值
字符串字面值[String Literals]指的是用两个双引号括起来的内容,我们可以使用字符串字面值给字符串常量或变量赋值。
字符串字面值中有以下几种特殊字符:
(1)专用特殊字符:\0 空字符,\\ 反斜杠,\t 制表符,\n 换行符,\r 回车符,\" 双引号,\' 单引号。
(2)单字节Unicode纯量,写作 \xnn,nn是两位十六进制数
(3)双字节Unicode纯量,写作 \unnnn,nnnn是四位十六进制数
(4)四字节Unicode纯量,写作 \Unnnnnnnn,nnnnnnnn是八位十六进制数
下面原书给出的例子来说明特殊字符用法,注意Swift的Character也是双引号表示:
3.初始化空字符串
Swift提供两种初始化空字符串的方法,一是空的两个双引号,而是调用String的无参数构造函数:
4.字符计数
Swift提供标准全局函数countElements来完成字符的计数,返回一个Int类型值。
由于不同的Unicode字符和同一Unicode不同的表示方式会占用不同的内存,countElements在进行字符计数时需要迭代计算整个字符串获取准确字符数,而不是简单根据空间大小计数。因而对长字符串的字符计数在使用该函数的时候要特别注意,可能会消耗一点时间。
5.字符串插入
用\( )符号可以将常量、变量、字符串字面值和表达式(完成计算后)插入到字符串中,这个方法前面已经使用很多次了,比C语言系列的格式化字符串要方便许多。
6.字符串比较
Swift提供三种字符串比较方式:字符串相等、前缀相等和后缀相等。
(1)字符串相等:==等号运算符实现,返回true时当仅当两个字符串完全一致。
(2)前缀相等,后缀相等:Swift字符串有hasPrefix()和hasSuffix()两个方法提供前缀相等和后缀相等判断方法,传入参数为查询前后缀,返回值为Bool类型。
Swift字符串有uppercaseString和lowercaseString属性分别存储String的大写形式和小写形式。
7.Unicode
Unicode是一种国际标准化的编码和文字表示,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Swift的String类型和Character类型都是Unicode编码的。
每一个Unicode的字符可以被一个或多个不同的Unicode纯量[Scalar]表示,Unicode纯量是一个特殊的21位数。Unicode字符串在存储时,对应的Unicode纯量根据不同的Unicode编码格式以叫做code unit的小单元编码,编码格式包括UTF-8(code unit是8位的)和UTF-16(code unit是16位的)等。
Swift的String提供相应属性获取一个字符串的Unicode编码:
(1)UTF-8:String的utf8属性
(2)UTF-16:String的utf8属性
(3)Unicode纯量:String的unicodeScalars属性
下面给出一个表情字符:DOG FACE的例子来反应三种形式的Unicode:
1.基础
Swift支持String字符串类型和Charater字符类型来提供一个快速的、支持Unicode编码的方式来处理字符操作。
Swift的String类型和Objective-C的NSString无缝接合,所有NSString的API对String同样适用。但是String变量总是可变长的,而在Objective-C中变长字符串是NSMutableString。
Swift字符串是传值类型,在传入函数参数或者赋值时,它是新建一个原来字符串的拷贝,而不是分配一个指针,新建字符串和原来的字符串并不储存在同一个空间。区别于Objective-C中NSString,后者是传址类型,即相当于一个指针。
Character字符类型同样用双引号把字符括起来,每一个字符代表一个独立的Unicode字符,字符串相当于Character的一个集合。
字符串和字符之间可以两两连接,使用最简单的运算符+,+=同样适用。
2.字符串字面值
字符串字面值[String Literals]指的是用两个双引号括起来的内容,我们可以使用字符串字面值给字符串常量或变量赋值。
字符串字面值中有以下几种特殊字符:
(1)专用特殊字符:\0 空字符,\\ 反斜杠,\t 制表符,\n 换行符,\r 回车符,\" 双引号,\' 单引号。
(2)单字节Unicode纯量,写作 \xnn,nn是两位十六进制数
(3)双字节Unicode纯量,写作 \unnnn,nnnn是四位十六进制数
(4)四字节Unicode纯量,写作 \Unnnnnnnn,nnnnnnnn是八位十六进制数
下面原书给出的例子来说明特殊字符用法,注意Swift的Character也是双引号表示:
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
3.初始化空字符串
Swift提供两种初始化空字符串的方法,一是空的两个双引号,而是调用String的无参数构造函数:
var emptyString1 = "" var emptyString2 = String()检查字符串是否为空可以检查String的Bool类型属性isEmpty。
4.字符计数
Swift提供标准全局函数countElements来完成字符的计数,返回一个Int类型值。
由于不同的Unicode字符和同一Unicode不同的表示方式会占用不同的内存,countElements在进行字符计数时需要迭代计算整个字符串获取准确字符数,而不是简单根据空间大小计数。因而对长字符串的字符计数在使用该函数的时候要特别注意,可能会消耗一点时间。
5.字符串插入
用\( )符号可以将常量、变量、字符串字面值和表达式(完成计算后)插入到字符串中,这个方法前面已经使用很多次了,比C语言系列的格式化字符串要方便许多。
6.字符串比较
Swift提供三种字符串比较方式:字符串相等、前缀相等和后缀相等。
(1)字符串相等:==等号运算符实现,返回true时当仅当两个字符串完全一致。
(2)前缀相等,后缀相等:Swift字符串有hasPrefix()和hasSuffix()两个方法提供前缀相等和后缀相等判断方法,传入参数为查询前后缀,返回值为Bool类型。
let studentID = "PB12210134" if studentID.hasPrefix("PB") { println("He or She is an undergraduate student.") }6.大写和小写字符串
Swift字符串有uppercaseString和lowercaseString属性分别存储String的大写形式和小写形式。
7.Unicode
Unicode是一种国际标准化的编码和文字表示,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Swift的String类型和Character类型都是Unicode编码的。
每一个Unicode的字符可以被一个或多个不同的Unicode纯量[Scalar]表示,Unicode纯量是一个特殊的21位数。Unicode字符串在存储时,对应的Unicode纯量根据不同的Unicode编码格式以叫做code unit的小单元编码,编码格式包括UTF-8(code unit是8位的)和UTF-16(code unit是16位的)等。
Swift的String提供相应属性获取一个字符串的Unicode编码:
(1)UTF-8:String的utf8属性
(2)UTF-16:String的utf8属性
(3)Unicode纯量:String的unicodeScalars属性
下面给出一个表情字符:DOG FACE的例子来反应三种形式的Unicode:
let dog = "Dog:[DOG FACE]" for codeUnit in dog.utf8 { print("\(codeUnit) ") } println() for codeUnit in dog.utf16 { print("\(codeUnit) ") } println() for scalar in dog.unicodeScalars { print("\(scalar.value) ") } println() /*prints 68 111 103 58 240 159 144 182 68 111 103 58 55357 56374 68 111 103 58 128054 */可以看到每个UTF-8的codeunit最大不超过UInt8.max,每个UTF-16的codeunit最大不超过UInt16.max。
相关文章推荐
- Swift学习笔记 - 教程学习二 字符串和字符(Strings and Characters)
- 【Swift】学习笔记(三)——字符和字符串
- Swift学习笔记基础语法-字符串与字符
- Swift学习笔记(十四)——字符,常量字符串与变量字符串
- 【Swift】学习笔记(三)——字符和字符串
- swift学习笔记-字符串和字符(Strings and Characters)
- Swift学习笔记(6)——字符串和字符(二)
- Swift学习笔记(5)——字符串和字符(一)
- Swift学习笔记系列——(2)字符串和字符
- .NET/Dot Net学习笔记---.net理解,C#.net的基本类型,字符串转义字符处理..
- swift笔记 (三) —— 字符和字符串
- Swift学习之十:字符串与字符(Strings and Characters)
- python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字
- C/C++学习笔记32:字符串操作与字符子串问题
- 学习笔记1:不能用字符串给字符数组赋值
- 学习笔记之字符和字符串处理
- C语言学习笔记:19_数组-字符数组与字符串(常用字符串函数)
- 学习笔记之10-字符和字符串常用处理函数
- 算法学习笔记(4)----字符串字符唯一
- 三 Swift学习之字符串和字符(Strings and Characters)