[关闭]
@phper 2016-08-12T12:28:23.000000Z 字数 2423 阅读 4156

swift 4. 字符串

swift


2. 用前缀或后缀法比较字符串

hasPrefixhasSuffix这2个字符串的对象方法,来判断和比较,他们返回boolean值的true或falsely

看个例子:

  1. //申明一个字符数组,后面会讲到
  2. var string1 = [
  3. "Act1:1:Dojo",
  4. "Act1:2:Do",
  5. "Act1:3:Dojo",
  6. "Act1:4:Dojo"
  7. ]
  8. //申明2个整型变量,记住中间要用逗号啊。
  9. var j = 0,k = 0,d = 0
  10. for i in string1 {
  11. if i.hasPrefix("Act1") {
  12. j++
  13. }
  14. if i.hasSuffix("Do"){
  15. k++
  16. }
  17. if i.containsString("Do") {
  18. d++
  19. }
  20. }
  21. print("有Act前缀的数有\(j)个") //输出4
  22. print("有Do后缀的数有\(k)个") //输出1
  23. print("包含Do的数有\(d)个") //输出4

3. 大小写转换

大小写转换是一般的语言中都会有的函数方法,swift中用字符串对象的属性uppercaseStringlowercaseStringcapitalizedString来转换,记住是属性。不是函数,也不是方法:

  1. //大小写转换
  2. var string2 = "hi,my name is yangyi ,what`s your name?"
  3. var string3 = "hi,My Name IS Yangyi ,what`s your name?"
  4. var string4 = "hi,my name is yangyi ,what`s your name?"
  5. var string_upp = string2.uppercaseString
  6. var string_lower = string3.lowercaseString
  7. var first_upp = string4.capitalizedString
  8. print("全部大写\(string_upp)")
  9. //全部大写HI,MY NAME IS YANGYI ,WHAT`S YOUR NAME?
  10. print("全部小写\(string_lower)")
  11. //全部小写hi,my name is yangyi ,what`s your name?
  12. print("首字母大写\(first_upp)")
  13. //首字母大写Hi,My Name Is Yangyi ,What`s Your Name?

我顺便来复习下其他语言中是如何大小写转换的:

  1. //javascript
  2. var a = "hello";
  3. var b = "HellO";
  4. var a_upper = a.toUpperCase(); //大写
  5. var a_lower = a.toLowerCase(); //小写
  1. //php
  2. $a = "hello, word!";
  3. $a_upper = strtoupper($a); //转换成大写
  4. $b_lower = strtolower($b); //转换成小写
  5. $first_upper = ucfirst($b); //首字母大写

4. 遍历一个字符串

在swift2中遍历字符串得用字符串的一个 characters属性:

  1. var str = "Hello, Swift~"
  2. for c in str.characters {
  3. print(c, terminator: " ")
  4. }

输出:

  1. H e l l o , S w i f t ~

5. 获取字符串中的某个字符

swift2中不能用str[0], str[1]等方式,得用index索引的方式,定位到位置:

startIndex 标示字符串的0开始的一个索引

  1. var str = "Hello, Swift"
  2. let startIndex = str.startIndex //0
  3. startIndex //0
  4. str[startIndex] //H

advancedBy 从索引位置开始取第几个值

  1. var str = "Hello, Swift"
  2. let startIndex = str.startIndex //0
  3. startIndex //0
  4. str[startIndex.advancedBy(1)] //e
  5. str[startIndex.advancedBy(7)] //S

predecessor 取前一个 succesor 取后一个

  1. var str = "Hello, Swift"
  2. let startIndex = str.startIndex //0
  3. let spaceIndex = startIndex.advancedBy(6) // " "定位到空格
  4. str[spaceIndex.predecessor()] // 空格前是","
  5. str[spaceIndex.successor()] // 空格后是"S"

endIndex 最后一个字符索引。

  1. var str = "Hello, Swift"
  2. let endIndex = str.endIndex // 13 最后一位是13。
  3. str[endIndex.predecessor()] //但是13没有,只有12.所以得取前一个。

所以,startIndex 和 endIndex是一个前闭后开 0..<13这样的结构。

Range 去一个区间的字符

  1. str[startIndex..<spaceIndex] // Hello,

其它的一些字符串的函数用法:

  1. let range = startIndex..<spaceIndex.predecessor() // 生成一个range 0..<5
  2. str.replaceRange(range, with: "Hi") // 替换一个区间 Hi, Swift
  3. str.appendContentsOf("!!!") // 在尾部追加 "Hi, Swift!!!"
  4. str.insert("?", atIndex: str.endIndex) //在一个索引出,插入一个字符 Hi, Swift!!!?
  5. str.removeAtIndex( str.endIndex.predecessor() ) // 移除一个字符,在索引处。 // 返回 ?
  6. str.removeRange( str.endIndex.advancedBy(-2)..<str.endIndex ) //移除一个区间。Hi, Swift!
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注