6.4 字符串比较

字符串比较涉及字符串大小和相等比较,以及字符串前缀和后缀的比较。

6.4.1 大小和相等比较

字符串类型与整型和浮点型一样,都可以进行相等以及大小的比较,比较的依据是Unicode编码值大小。例如下面两个字符:

{%} Unicode:1F43C

{%} Unicode:1F431

我们比较一下,由于1F43C要大于1F431,因此在比较时{%}大于{%},运行以下代码并查看结果。

6.4 字符串比较 - 图5

运行的结果是:{%}大于{%}

当然,比较动物的大小没有太大的实际意义,但是比较ABC等传统字符是有意义的。

提示 上述代码不能使用Character替换String类型,因为Character类型不支持><>=<=运算符。

与比较大小不同的是,我们需要比较字符串是否相等,需要注意的是,StringCharacter类型支持==!=运算符,但是不支持===!==运算符。让我们看看下面的代码:

6.4 字符串比较 - 图8

在上述代码中,我们比较字符串变量{%}是否等于{%}字符串,结果是{%},这个结果不用过多解释。代码中还比较了通过""String()创建的两种空字符串是否相等,结果是它们也是相等的。

6.4.2 前缀和后缀比较

在字符串比较中,有时候需要比较前缀或后缀。例如,如果需要判断某个文件夹中特定类型的文件,就要判断它们的扩展名,这就需要判断它的后缀,我们可以使用字符串hasSuffix方法。如果需要判断某个文件夹中特定字符串开头的文件,就可以使用字符串的hasPrefix方法来判断前缀。

以下代码实现的是文件的查找过程:

  1. import UIKit
  2. let docFolder = [
  3. "java.docx",
  4. "JavaBean.docx",
  5. "Objecitve-C.xlsx",
  6. "Swift.docx"
  7. ]
  8. var wordDocCount = 0
  9. for doc in docFolder {
  10. if doc.hasSuffix(".docx") {
  11. ++wordDocCount
  12. }
  13. }
  14. println("文件夹中Word文档个数是: \(wordDocCount)")
  15. var javaDocCount = 0
  16. for doc in docFolder {
  17. let lowercaseDoc = doc.lowercaseString
  18. if lowercaseDoc.hasPrefix("java") {
  19. ++javaDocCount
  20. }
  21. }
  22. println("文件夹中Java相关文档个数是: \(javaDocCount)")

上述代码第①行声明并初始化了数组变量docFolder,关于数组我们会在第7章介绍。第②行代码是使用for in语句遍历数组集合,关于for in语句我们会在7.2.4节详细介绍,这个过程就是从集合docFolder中取出一个元素保存在doc变量中。第③行代码中的doc.hasSuffix(".docx")语句是判断doc字符串的结尾是否是“.docx”,“.docx”是Word文档。第④行代码doc.lowercaseString属性是获得小写字符串,这样我们在判断前缀的时候直接判断是否为“java”就可以了。与lowercaseString属性类似的还有uppercaseString属性。