[swift]4.0原生字符串

来源:互联网 发布:uu大魔王淘宝店 编辑:程序博客网 时间:2024/09/21 08:16

4.1字符
1.格式: 变量关键字和常量关键字
变量 : Character = 字符值。
注意点:字符值 必须用双引号括起来, 必须是一个字符。
例:
var ch :Character = “c”// 字符值 必须用双引号,并且是一个字符
println(“ch=(ch)”)
运行结果
ch=c
2.字符串和字符的关系:
字符串是由N个字符组成的,即字符串是字符的集合。
例:
var str = “ABC”//字符串
“ABC” 是有 三个字符组成的分别是 :字符”A”,字符“B”,字符”C”
4.2创建字符串
1.Swift支持String字符串类型和Charater字符类型来提供一个快速的、支持Unicode编码的方式来处理字符操作。
Swift的String类型和Objective-C的NSString无缝接合,所有NSString的API对String同样适用。但是String变量总是可变长的,而在Objective-C中变长字符串是NSMutableString。
2.Swift字符串是传值类型,在传入函数参数或者赋值时,它是新建一个原来字符串的拷贝,而不是分配一个指针,新建字符串和原来的字符串并不储存在同一个空间。区别于Objective-C中NSString,后者是传址类型,即相当于一个指针。
Character字符类型同样用双引号把字符括起来,每一个字符代表一个独立的Unicode字符,字符串相当于Character的一个集合。
字符串和字符之间可以两两连接,使用最简单的运算符
+,+=同样适用。
3.创建空字符串
/定义一个空字符串第一种方法:
var str1=”“定义一个空字符串
第二种方法:
var str2 = String()
运行结果
str1=
str2=
4.判断字符串是否为空 (isEmpty)
判断字符串是否为空:
var str3:String = “”if str3.isEmpty { //isEmpty是字符串的一个属性,判断字符串是否为空
println(“str3的值是空”)
}
else{
println(“str3的值不为空”)
}

运行结果
str3的值是空
5.字符串的转义符
\0 空字符 \ 反斜杠\ t 制表符\n 换行符\r 回车符
\” 双引号\’ 单引号
例:
换行符:
var strA = “Hello World \n 1”// \n是换行符
println(“strA=(strA)”)
引号:
var strB = “\”双引号”// \” 是代表双引号
println(“strB=(strB)”)
单引号:
var strC = “\’单引号”// \’ 代表单引号
println(“strC=(strC)”)
运行结果
strA=Hello World
1
strB=”双引号
strC=’单引号
4.3字符串拼接
1.字符和字符串拼接,用+直接来拼接,组成新的字符串 (和字符串拼接用法一直)
例:import Foundation
var C:Character = “S”//定义C 是字符变量var str = C + ” hello”
println(str )
运行结果
S hello
2.字符串变量和常量用+或 +=来拼接 组成新的字符串
例:
多个字符串变量拼接 用 + 来拼接
var str4 = “hello”
var str5 = ” swift”
var str6 = str4+str5 //字符串变量拼接
println(“str6=(str6)”)
字符串变量和常量用+或 +=来拼接
var str7=”hello ”
str7 += “swift”//字符串变量和字符常量拼接可以用+= 拼接
println(“str7=(str7)”)
运行结果
str6=hello swift
str7=hello swift
4.字符串和占位变量 组成新的字符串
var a = 3//定义一个整形变量
var strQ = “a = (a)”// 字符串和占外变量,组成新的变量(占外变量表示(变量))
println(“(strQ)”)
运行结果
a = 3
4.4字符串插入、删除和替换
1.对应可变字符串可以插入、删除和替换,String提供了几个方法可以帮助实现这些操作。这些方法如下:
splice(_:atIndex:)。在索引位置插入字符串。
insert(_:atIndex:)。在索引位置插入字符。
removeAtIndex(_:)。在索引位置删除字符。
removeRange(_:)。删除指定范围内的字符串。
replaceRange(_:,with: String) 。使用字符串或字符替换指定范围内的字符串。
  代码:
var str =”Swift” print(“原始字符串:(str)”)
str.splice(“Objective-Cand “.characters, atIndex: str.startIndex)
str.insert(“.”,atIndex: str.endIndex)
str.removeAtIndex(str.endIndex.predecessor())
var startIndex =str.startIndex
var range =startIndex…endIndex
str.removeRange(range)
startIndex =str.startIndex
str.replaceRange(range,with: “C++”)
print(“替换范围后:(str)”)
输出结果:
原始字符串:Swift
插入字符串后:Objective-C and Swift
插入.字符后:Objective-Cand Swift.
删除.字符后:Objective-Cand Swift
删除范围后:C and Swift
替换范围后:C++ and Swift
4.5字符串比较
1.字符串比较:OC:
NSString *str1 = @”abc”;
NSString *str2 = @”abc”;
if ([str1 compare:str2] == NSOrderedSame)
else { NSLog(@”不相等”); }
{ NSLog(@”相等”); }
else { NSLog(@”不相等”); }
Swift:(== / != / >= / <=), 和C语言的strcmp一样是逐个比较
var str4 = “abc”;
var str5 = “abc”;
if str4 == str5 { print(“相等”); }
else { print(“不相等”); }
var str6 = “abd”;
var str7 = “abc”;
else { print(“不大于等于”); }
4.6大小和相等比较
字符串比较可以分为:不区分大小写比较、区分大小写比较以及本地化比较三部分。首先我们来看不区分大小写比较,不区分大小写比较顾名思义就是不区分字符串中字母的大小写,即A和a相同。
1.不区分大小写比较
在NSString中使用caseInsensitiveCompare(_:)方法实现这一功能,其语法形式如下:
func caseInsensitiveCompare(_ string: String) -> ComparisonResult
其中,string用来指定一个比较的字符串。该方法的返回值为ComparisonResult类型
。ComparisonResult是一个枚举类型,包含了以下3个成员:
q orderedAscending(-1):左操作数小于右操作数。
q orderedSame(0):两个操作数相等。
q orderedDescending(1):左操作数大于右操作数。
2.区分大小写比较
有不区分大小写比较,相对的就有区分大小写比较。在NSString中提供了4种方法实现了这种比较,
分别为:compare(:)、compare(:options:)、compare(:options:range:)和compare(:options:range:locale:)方法。
(1)compare(_:)方法就是用来比较字符串的,它需要区分字符串的大小写,其语法形式如下:
func compare(_ string: String) -> ComparisonResult
其中,string用来指定一个比较的字符串。
compare(:options:)方法和compare(:)方法实现的功能类似,它是对字符串进行比较,但是它比compare(_:)方法多了一个mask参数。该参数可以用来指定一个选项标记(这个标记可以作为字符串比较的条件)。
在编程中,mask参数最常被设置为以下5种:
q caseInsensitive:不区分大小写比较
q literal:区分大小写比较
q backwards:从字符串末尾开始搜索
q anchored:搜索限制范围的字符串
q numeric:按照字符串里的数字为依据,算出顺序。例如 Foo2.txt < Foo7.txt < Foo25.txt
compare(_:options:)方法的语法形式如下:
func compare(_ string: String, options mask: NSString.CompareOptions = []) -> ComparisonResul
(3)compare(:options:range:)方法和compare(:options:)方法的功能类似,但是它比compare(_:options:)方法多了一个rangeOfReceiverToCompare参数,此参数可以用来对比较范围进行设置。其语法形式如下:
func compare(_ string: String, options mask: NSString.CompareOptions = [], range rangeOfReceiverToCompare: NSRange) -> ComparisonResult
(4)compare(:options:range:locale:)方法和compare(:options:range:)方法的功能类似,但是它比compare(_:options:range:)方法多了一个locale参数,此参数可以用来设置语言环境。其语法形式如下:
func compare(_ string: String, options mask: NSString.CompareOptions = [], range rangeOfReceiverToCompare: NSRange, locale: AnyObject?) -> ComparisonResult
3.本地化比较
对于本地化比较在NSString中提供了3种方法,
分别为:
localizedCaseInsensitiveCompare(:)、localizedStandardCompare(:)和localizedCompare(_:)。
(1)localizedCaseInsensitiveCompare(_:)方法为不区分大小写、本地化比较字符串,其语法形式如下:
func localizedCompare(_ string: String) -> ComparisonResult
其中,string用来指定一个比较的字符串。
(2)localizedStandardCompare(_:)方法为本地化标准字符串的比较,其语法形式如下:
func localizedStandardCompare(_ string: String) -> ComparisonResult
其中,string用来指定一个比较的字符串。
localizedCompare(_:)方法是区分大小写、本地化比较字符串,其语法形式如下:
func localizedCompare(_ string: String) -> ComparisonResult
其中,string用来指定一个比较的字符串。
4.判断字符串
在NSString中提供了3种对字符串判断的方法,
分别为:hasPrefix(:)、hasSuffix(:)和isEqual(to:)方法。
(1)hasPrefix(_:)方法用来判断字符串是否以某一指定字符串开头,其语法形式如下:
func hasPrefix(_ str: String) -> Bool
其中,str用来指定一个字符串。
(2)hasSuffix(:)方法正好和hasPrefix(:)方法相反,它是用来判断字符串是否以某一指定字符串结尾的,其语法形式如下:
func hasSuffix(_ str: String) -> Bool
其中,str用来指定一个字符串。
(3)isEqual(to:)方法是用来判断字符串是否相等的,其语法形式如下:
func isEqual(to aString: String) -> Bool
其中,aString用来指定字符串。
4.7前缀和后缀比较
1.前缀/后缀相等
通过调用字符串的 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” ]

1 0