swift 4. 字符串
标签:swift
2. 用前缀或后缀法比较字符串
用hasPrefix
和hasSuffix
这2个字符串的对象方法,来判断和比较,他们返回boolean值的true或falsely
看个例子:
//申明一个字符数组,后面会讲到
var string1 = [
@H_301_21@"Act1:1:Dojo",@H_301_21@"Act1:2:Do",@H_301_21@"Act1:3:Dojo",@H_301_21@"Act1:4:Dojo"
]
//申明2个整型变量,记住中间要用逗号啊。
var j = 0,k = 0,d = 0
for i in string1 {
if i.hasPrefix(@H_301_21@"Act1") {
j++
}
if i.hasSuffix(@H_301_21@"Do"){
k++
}
if i.containsString(@H_301_21@"Do") {
d++
}
}
print(@H_301_21@"有Act前缀的数有\(j)个") //输出4
print(@H_301_21@"有Do后缀的数有\(k)个") //输出1
print(@H_301_21@"包含Do的数有\(d)个") //输出4
3. 大小写转换
大小写转换是一般的语言中都会有的函数方法,swift中用字符串对象的属性uppercaseString
和lowercaseString
和capitalizedString
来转换,记住是属性。不是函数,也不是方法:
//大小写转换
var string2 = @H_301_21@"hi,my name is yangyi,what`s your name?"
var string3 = @H_301_21@"hi,My Name IS Yangyi,what`s your name?"
var string4 = @H_301_21@"hi,what`s your name?"
var string_upp = string2.uppercaseString
var string_lower = string3.lowercaseString
var first_upp = string4.capitalizedString
print(@H_301_21@"全部大写\(string_upp)")
//全部大写HI,MY NAME IS YANGYI,WHAT`S YOUR NAME?
print(@H_301_21@"全部小写\(string_lower)")
//全部小写hi,what`s your name?
print(@H_301_21@"首字母大写\(first_upp)")
//首字母大写Hi,My Name Is Yangyi,What`s Your Name?
我顺便来复习下其他语言中是如何大小写转换的:
//javascript
var a = @H_301_21@"hello";
var b = @H_301_21@"HellO";
var a_upper = a.toUpperCase(); //大写
var a_lower = a.toLowerCase(); //小写
//PHP
$a = @H_301_21@"hello,word!";
$a_upper = strtoupper($a); //转换成大写
$b_lower = strtolower($b); //转换成小写
$first_upper = ucfirst($b); //首字母大写
4. 遍历一个字符串
在swift2中遍历字符串得用字符串的一个 characters
属性:
var str = @H_301_21@"Hello,Swift~"
for c in str.characters {
print(c,terminator: @H_301_21@" ")
}
输出:
H e l l o,S w i f t ~
5. 获取字符串中的某个字符
swift2中不能用str[0],str[1]
等方式,得用index
索引的方式,定位到位置:
startIndex 标示字符串的0开始的一个索引
var str = @H_301_21@"Hello,Swift"
let startIndex = str.startIndex //0
startIndex //0
str[startIndex] //H
advancedBy 从索引位置开始取第几个值
var str = @H_301_21@"Hello,Swift"
let startIndex = str.startIndex //0
startIndex //0
str[startIndex.advancedBy(1)] //e
str[startIndex.advancedBy(7)] //S
predecessor 取前一个 succesor 取后一个
var str = @H_301_21@"Hello,Swift"
let startIndex = str.startIndex //0
let spaceIndex = startIndex.advancedBy(6) // " "定位到空格
str[spaceIndex.predecessor()] // 空格前是","
str[spaceIndex.successor()] // 空格后是"S"
endIndex 最后一个字符索引。
var str = @H_301_21@"Hello,Swift"
let endIndex = str.endIndex // 13 最后一位是13。
str[endIndex.predecessor()] //但是13没有,只有12.所以得取前一个。
所以,startIndex 和 endIndex是一个前闭后开 0..<13
这样的结构。
Range 去一个区间的字符
str[startIndex..<spaceIndex] // Hello,
let range = startIndex..<spaceIndex.predecessor() // 生成一个range 0..<5
str.replaceRange(range,with: @H_301_21@"Hi") // 替换一个区间 Hi,Swift
str.appendContentsOf(@H_301_21@"!!!") // 在尾部追加 "Hi,Swift!!!"
str.insert(@H_301_21@"?",atIndex: str.endIndex) //在一个索引出,插入一个字符 Hi,Swift!!!?
str.removeAtIndex( str.endIndex.predecessor() ) // 移除一个字符,在索引处。 // 返回 ?
str.removeRange( str.endIndex.advancedBy(-2)..<str.endIndex ) //移除一个区间。Hi,Swift!