swift学习笔记3之字符串和字符(Strings and Characters)

by kingzcheung on July 1, 2016

swift 定义字符串与定义整数浮点数一样不需要指定变量类型。字符串连接同样使用+号。

初始化字符串

定义字符串有两种定义方式,一种是使用""来定义,另一种是通过实例化一个String对象来创建。

var astr = "hello world"
var bstr = String("hello world")

字符串索引

swift 的字符串索引因为不同的字符可能占用的内存空间并不一样,所以无法通过整数索引来获取。
startIndex:获取String中第一个字符的索引,从0开始。
endIndex:获取String最后一个字符后面的索引。
predecessor:可以立即得到startIndex或者endIndex前面一个索引。
successor:可以立即得到startIndex或者endIndex后面一个索引。
advancedBy(_:):可以立即得到startIndex或者endIndex后面第几个索引

var astr = "hello world"
var bstr = String("hello world")

print(bstr.endIndex.predecessor()) //10
print(astr[astr.endIndex.predecessor()]) //d
print(bstr[bstr.startIndex.advancedBy(1)]) //e

插入和删除 (Inserting and Removing)

insert:调用insert(_:atIndex:)方法可以在一个字符串的指定索引插入一个字符
insertContentsOf:调用insertContentsOf(_:at:)方法可以在一个字符串的指定索引插入一个字符串
removeAtIndex:调用removeAtIndex(_:)方法可以在一个字符串的指定索引删除一个字符
removeRange:调用removeRange(_:)方法可以在一个字符串的指定索引删除一个子字符串

var astr = "hello world"
var bstr = String("hello world")

print(bstr.endIndex.predecessor()) //10
print(astr[astr.endIndex.predecessor()]) //d
print(bstr[bstr.startIndex.advancedBy(1)]) //e

astr.insert("!", atIndex: astr.endIndex) //hello world!
astr.insertContentsOf("!".characters, at: astr.endIndex.predecessor())//hello world!!


astr.removeAtIndex(astr.startIndex) //删除了h
bstr.removeRange(bstr.endIndex.advancedBy(-6)..<bstr.endIndex)//删除了 world,只剩下hello
//astr.removeAll() //删除所有
print(astr)

字符串比较之前缀/后缀相等

hasPrefix:前缀比较
hasSuffix:后缀比较
两个方法的参数都是字符串,返回bool

var abc = "abcdefg"

print(abc.hasPrefix("abc")) //true

print(abc.hasSuffix("abc"))//false