玩转swift字符串——Advanced

最近在尝试学一些iOSswift开发,要做一个“四则运算计算器”,其中涉及到很多字符串运算,终于在不断查阅文档和stackoverflow的情况下完成。感慨道,swift的开发手册太过于简单呐,完全不够用,很多东西还得自己摸索,但其中唯一不变的真理就是:“请在 playground 里面好好玩耍吧!!!”

在这里,我把我搜集到的知识与大家分享一下

String 和 Character

字符串声明

  1. var str = "Hello, playground"
  2. let str2 = String()

判断是否为空

  1. str.isEmpty

字符串长度

  1. countElements(str)
  2. //如果是NSString,那么长度就是
  3. var str3:NSString = str
  4. str3.length

字符串的遍历

  1. for eachChar in str{
  2. println eachChar
  3. }
  4. //这时有人会问,那么我想从后往前遍历呢?!
  5. for eachChar in reverse(str){
  6. println eachChar
  7. }

字符串拼接

  1. //拼接字符串型
  2. str += " Hello"
  3. //拼接非字符串型
  4. var ch:Character = "!"
  5. str.append(ch)
  6. //或者
  7. str += "\(ch)"

字符串的插值

  1. //String Interpolation
  2. let imInt:Int = 2
  3. let imDouble:Double = 3.14
  4. let imBool:Bool = true
  5. let imString:String = "hello"
  6. let imTuple = (2,4)
  7. let imOptionnal:Int? = nil
  8. let imCharacter:Character = "!"
  9. println("\(imInt)\n\(imDouble)\n\(imBool)\n\(imString)\n\(imTuple)\n\(imOptionnal)\n\(imCharacter)")

String基础操作

字符串比较

  1. //String Comparison
  2. let str_a = "abc"
  3. let str_b = "abc"
  4. str_a == str_b //true
  5. let str_c = "abd"
  6. str_a < str_c //因为 d 要比 c 靠后,所以 true
  7. let str_d = "abcd"
  8. str_c > str_d //虽然 str_c 有三个,str_d 有四个,但是 d 比 c 要靠后, 所以 true
  9. str_b < str_d //前三位相同,但是str_d 有第四位,所以 true

前缀/后缀 我在这里就不说了,每个文档都会讲

导入Foundation使用更多字符串功能

使用 Foundation, 其实每个”.swift”文件都已经默认导入 Foundation 了,所以不需要我们再在头部导入

  1. //default import Foundation
  2. str.capitalizedString //大写首字母
  3. str.uppercaseString //全部转大写
  4. str.lowercaseString //全部转小写

字符串修剪

  1. var str5 = " !hi!!! "
  2. //清除空格
  3. str5.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
  4. //清除特定字符 如“!”
  5. str5.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString:" !"))

字符串分割

  1. var str6 = "welcome to play swift"
  2. //以空格作为分割依据
  3. str6.componentsSeparatedByString(" ")
  4. var str7 = "welcome to play swift!Step-by-step learn from now"
  5. //以特定字符作为分割依据 如:" ","!","-"三个
  6. str7.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: " !-"))

字符串链接

  1. var str8 = "-"
  2. str8.join(["2","3","4","5"]) //输出:2-3-4-5

String、Int、Float、Double 互相转换

  1. //String to Int
  2. var str = "4"
  3. str.toInt()
  4. //String to Float
  5. var str1 = "3.14"
  6. //下面的方法 return 3.14000010490417 ,个人建议最好还是使用下面的方法转换成double比较好
  7. NSString(string: str1).floatValue
  8. //String to Double
  9. var str2 = "1.3333"
  10. NSString(string: str2).doubleValue //return 1.3333
  11. //Int to String
  12. var num = 234
  13. String(num)
  14. //float to String
  15. var num1 = 3.14
  16. String(format:"%f", num1) //return "3.140000"
  17. String(format:"%.2f", num1) //return "3.14"

Something else

如果你对 3.140000 这种形式的数字感到恶心的话,那么你就对了因为我也是这样,试想:

  1. var result = 3.125 + 4.875 //return 8.0 , It's good!
  2. //但是你如果使用String(format:)进行转换
  3. String(format: "%f", result) //return 8.00000 It's bad!
  4. //所以你不如直接使用“字符串插值”的方法
  5. \(result)”

String.Index 和 Range

在swift语言中,你会发现很多函数参数中要求 String.Index 类型,那下面我们就用实例来说明什么是 String.Index 类型 范围

  1. str7 = "Welcome to play swift!step by step learn from now"
  2. str7.rangeOfString("step") //return 22..<26
  3. //从后往前搜索,需要第二个参数
  4. str7.rangeOfString("step", options:NSStringCompareOptions.BackwardsSearch) //return 30..<34
  5. //我们同样可以设置第二个参数,表示匹配串忽略大小写限制“原字符串中是 Welcome,我们搜索 welcome”
  6. str7.rangeOfString("welcome", options: NSStringCompareOptions.CaseInsensitiveSearch) //return 0..<7
String.Index 是什么?
  1. str7 = "Welcome to play swift!step by step learn from now"
  2. str7.startIndex //0
  3. str7.endIndex //49
  4. //range between 0..<49
  5. let strRange = Range<String.Index>(start:str7.startIndex, end:str7.endIndex)
  6. //注意这里,startIndex 和 endIndex 是 String.Index 类型的,不是 Int 类型!!
  7. let startIndex:String.Index = str7.startIndex //0
  8. let endIndex:String.Index = advance(str7.startIndex, 10) //10
  9. //这里定义了一个 Range 类型,由 start 和 end 两个参数构成
  10. let searchRange = Range<String.Index>(start:startIndex, end:endIndex)
  11. //在定义的范围“searchRange”内进行搜索操作
  12. str7.rangeOfString("step", options: NSStringCompareOptions.CaseInsensitiveSearch, range: searchRange)

截取子串

  1. var toIndex = advance(str7.startIndex, 4)
  2. //从字符串开头开始到即第4个字符
  3. str7.substringToIndex(toIndex) // Welc
  4. var fromIndex = advance(str7.startIndex, 14)
  5. //从字符串某个位置开始向后 14 位
  6. str7.substringFromIndex(fromIndex) // y swift!step by step le...
  7. //在字符串 4 位置开始,到 14 位置结束
  8. str7.substringWithRange(Range<String.Index>(start:toIndex, end:fromIndex)) //ome to pla

获取字符串最后一个字符

  1. //方法一
  2. str7.substringFromIndex(str7.endIndex.predecessor())
  3. //方法二-较繁琐
  4. var lastChar:String.Index = advance(str7.startIndex, countElements(str7) - 1)
  5. var lastChar = str7.substringFromIndex(lastChar)

字符串插入

  1. var insertIndex = advance(str7.startIndex, 22)
  2. //在第 22 字符的后面插入
  3. str7.insert("!", atIndex: insertIndex)

字符串删除

  1. str7.removeAtIndex(insertIndex)
  2. str7.removeRange(Range<String.Index>(start:str7.startIndex, end:insertIndex))

字符串替换

  1. var replaceEndIndex = advance(str7.startIndex, 13)
  2. str7.stringByReplacingCharactersInRange(Range<String.Index>(start:str7.startIndex,end:replaceEndIndex), withString:"Step-by-step")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值