最近在尝试学一些iOSswift开发,要做一个“四则运算计算器”,其中涉及到很多字符串运算,终于在不断查阅文档和stackoverflow的情况下完成。感慨道,swift的开发手册太过于简单呐,完全不够用,很多东西还得自己摸索,但其中唯一不变的真理就是:“请在playground里面好好玩耍吧!!!”
在这里,我把我搜集到的知识与大家分享一下
String 和 Character
字符串声明
var str = "Hello,playground"
-
let str2 = String()
判断是否为空
str.isEmpty
字符串长度
countElements(str)
-
//如果是NSString,那么长度就是
var str3:NSString = str
-
str3.length
字符串的遍历
- for eachChar in str{
-
println eachChar
}
- //这时有人会问,那么我想从后往前遍历呢?!
in reverse){
-
println eachChar
}
字符串拼接
//拼接字符串型
-
str += " Hello"
//拼接非字符串型
- var chCharacter = "!"
str.append(ch)
- //或者
str "\(ch)"
字符串的插值
- //String Interpolation
- let imIntInt = 2
let imDoubleDouble 3.14
- let imBoolBool = true
let imStringString "hello"
- let imTuple = (2,4)
let imOptionnalInt? nil
- let imCharacter"!"
println("\(imInt)\n\(imDouble)\n\(imBool)\n\(imString)\n\(imTuple)\n\(imOptionnal)\n\(imCharacter)")
String基础操作
字符串比较
- //String Comparison
- let str_a "abc"
let str_b "abc"
-
str_a == str_b //true
let str_c "abd"
- < str_c //因为 d 要比 c 靠后,所以 true
let str_d "abcd"
-
str_c > str_d //虽然 str_c 有三个,str_d 有四个,但是 d 比 c 要靠后, 所以 true
str_b < str_d //前三位相同,但是str_d 有第四位,所以 true
前缀/后缀 我在这里就不说了,每个文档都会讲
导入Foundation使用更多字符串功能
使用 Foundation,其实每个”.swift”文件都已经默认导入 Foundation 了,所以不需要我们再在头部导入
- //default import Foundation
-
str.capitalizedString //大写首字母
str.uppercaseString //全部转大写
- .lowercaseString //全部转小写
字符串修剪
- var str5 " !hi!!! "
- //清除空格
str5.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
- //清除特定字符 如“!”
str5(charactersInString:" !"))
字符串分割
- var str6 "welcome to play swift"
- //以空格作为分割依据
str6.componentsSeparatedByString" ")
- var str7 "welcome to play swift!Step-by-step learn from now"
//以特定字符作为分割依据 如:" ","!","-"三个
-
str7.componentsSeparatedByCharactersInSet: " !-"字符串链接
- var str8 "-"
-
str8.join(["2""3""4""5"]) //输出:2-3-4-5
String、Int、Float、Double 互相转换
- //String to Int
- "4"
str.toInt()
- //String to Float
var str1 "3.14"
- //下面的方法 return 3.14000010490417 ,个人建议最好还是使用下面的方法转换成double比较好
NSString(string: str1).floatValue
- //String to Double
var str2 "1.3333"
-
: str2).doubleValue //return 1.3333
//Int to String
- var num 234
(num//float to String
var num1 = 3.14
- (format"%f" num1) //return "3.140000"
"%.2f"//return "3.14"
Something else
如果你对 3.140000 这种形式的数字感到恶心的话,那么你就对了因为我也是这样,试想:
- var result 3.125 + 4.875 //return 8.0,It's good!
- //但是你如果使用String(format:)进行转换
result//return 8.00000 It's bad!
- //所以你不如直接使用“字符串插值”的方法
“\(result)”
String.Index 和 Range
在swift语言中,你会发现很多函数参数中要求 String.Index 类型,那下面我们就用实例来说明什么是 String.Index 类型范围
str7 "Welcome to play swift!step by step learn from now"
- .rangeOfString"step"//return 22..<26
//从后往前搜索,需要第二个参数
- optionsNSStringCompareOptions.BackwardsSearch//return 30..<34
//我们同样可以设置第二个参数,表示匹配串忽略大小写限制“原字符串中是 Welcome,我们搜索 welcome”
- "welcome": CaseInsensitiveSearch//return 0..<7
- str7 "Welcome to play swift!step by step learn from now"
- str7.startIndex //0
- str7.endIndex //49
- //range between 0..<49
- let strRange Range<Index>(start:str7.startIndex end.endIndex)
- //注意这里,startIndex 和 endIndex 是 String.Index 类型的,不是 Int 类型!!
- let startIndexIndex = str7//0
- let endIndex= advance(str7 10//10
- //这里定义了一个 Range 类型,由 start 和 end 两个参数构成
- let searchRange :startIndex:endIndex)
- //在定义的范围“searchRange”内进行搜索操作
- range: searchRange)
截取子串
- var toIndex //从字符串开头开始到即第4个字符
str7.substringToIndex(toIndex// Welc
- var fromIndex 14)
//从字符串某个位置开始向后 14 位
- .substringFromIndex(fromIndex// y swift!step by step le...
//在字符串 4 位置开始,到 14 位置结束
- .substringWithRange:toIndex:fromIndex)) //ome to pla
获取字符串最后一个字符
字符串插入
- var insertIndex 22//在第 22 字符的后面插入
str7.insert"!" atIndex: insertIndex字符串删除
str7.removeAtIndex(insertIndex.removeRange:insertIndex字符串替换
- var replaceEndIndex 13.stringByReplacingCharactersInRange:replaceEndIndex), withString"Step-by-step")