前言

    public struct String
    public class NSString : NSObject, NSCopying, NSMutableCopying, NSSecureCoding
  • Swift 语言主要使用 String 和 Character 来存储字符数据。String 是字符串类型,Character 是字符类型,一个或多个字符组成一个字符串。

  • String :

    • Swift 语言中的 String 类型与经典 Cocoa 或 Cocoa Touch 框架中的 Foundation NSString 类型进行了无缝衔接,Swift 语言中的 String 类型实现了 NSString 的大部分属性和方法,字符串搜索、拷贝、插入、删除等操作都有相应的 API 函数可以使用。

    • String 类型可以调用 NSString 类型的属性和方法,但是 NSString 类型不可以调用 String 类型独有的方法。并且以往框架中的任何要求使用 NSString 类型作为参数的函数,都可以使用 String 类型来替换,Swift 语言会自动将 String 类型转换为 NSString 类型。

    • Swift 语言中可以用 as 将 NSString 类型字符串转换为 String 类型。
      • 如:var str:String = (NSString(string: "beijing") as String)
    • Swift 语言中 String 类型声明为变量就可以被修改。而在 OC 中,需要通过选择 NSString 和 NSMutableString 来指定字符串是否可以被修改。

    • Swift 语言中不能直接将字符串当作字符数组那样通过使用下标访问指定字符。

    • Swift 语言支持字符串插值,你可以在长字符串中插入常量、变量、字面量和表达式,而不用经过特殊的转换,这使得创建用于展示、存储和打印的自定义字符串变的轻松自如。插入的值放在 “ ( ) ” 的括号中。
      • 如:let gameName = "2048"; print("hello my program name is \(gameName)")
    • Swift 语言使用值传递作为默认字符串拷贝方式,无论何时,传递的都是值的拷贝,当我们对 String 类型的变量或者常量进行赋值操作或当作函数/方法的参数传递时,这个变量或者常量的值会被拷贝,然后使用这个拷贝出的值进行赋值或者当作参数传递。

    • Swift 语言由于没有 length 属性,统计字符个数需要使用新的方法,在 Swift 2.2 中使用 characters.count 获取字符串中字符数量。NSString 的 length 属性在被 Swift 的 String 值访问时会被转换为 utf16count。所以 lrngth 属性是基于 UTF-16 表示的十六位 code units 数量,而不是基于 Unicode 字符,所以通过 count 返回的字符串数量并不总是与相同字符的 NSString 的 length 属性值相同。
      • 如:let str = "hello world"; print( str.characters.count )
  • Character :

    • 由于全面支持 Unicode 字符,每一个字符值代表一个 Unicode 字符,在 Swift 语言中表示字符使用 Character 类型。

    • Swift 语言声明字符时需要加上类型名称,否则会被推断为 String 类型。
      • 如:var doller:Character = "$"

1、字符串的输出

    let num:Int = 123

    // 直接输出 自动换行
    print(num)

    // 使用字符串插值输出 自动换行 输出常量或变量
    print("\(num)")

    // 使用强制类型转换输出 自动换行 输出常量或变量
    print(String(num))

    // 使用输出控制符输出 自动换行 且输出时间等信息 输出常量或变量
    NSLog("%d", num)

    // 使用字符串插值输出 自动换行 且输出时间等信息 输出常量或变量
    NSLog("\(num)")

    // 使用强制类型转换输出 自动换行 且输出时间等信息 输出常量或变量
    NSLog(String(num))

2、字符串的创建

    // String 型字符串的创建

        // 创建字符变量,必须指明为 Character 类型,否则会被自动推断为 String
        let str1:Character = "I"

        // 创建字符串变量,指明变量类型,未初始化
        let str2:String

        // 创建字符串变量,指明变量类型,并赋值
        let str3:String = "I Love China"

        // 创建字符串变量,未指明变量类型,自动推断为 String 类型
        let str4 = "Hello World"

        // 直接通过另一个字符串创建,与 str3 的地址不同,是值复制
        let str5:String = str3

    // NSString 型字符串的创建

        // 直接创建 NSString 类型字符串,未初始化
        let nsStr1:NSString
        let nsStr2:NSString = "123"

        // 由另一个 String 类型字符串创建
        let nsStr3 = NSString(string: str4)

        // 由另一个 NSString 类型字符串创建
        let nsStr4 = NSString(string: nsStr2)

        // 格式化创建 NSString 类型字符串
        let nsStr5 = NSString(format: "age is %d, score is %d", 18, 120)

        // 由 C 语言的字符串创建字符串
        let nsStr6:NSString? = NSString(CString: "bei jing nin hao", encoding: NSUTF8StringEncoding)
        let nsStr7:NSString? = NSString(UTF8String: "bei jing nin hao")

        // 从 文件 创建,try? 异常处理,若文件不存在或读取错误返回 nil
        let path = NSHomeDirectory() + "/Desktop/test.txt"
        let nsStr8:NSString? = try? NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding)

        // 从 Url 创建,try? 异常处理,若文件不存在或读取错误返回 nil
        let url = NSURL(fileURLWithPath: NSHomeDirectory() + "/Desktop/test.txt")
        let nsStr9:NSString? = try? NSString(contentsOfURL: url, encoding: NSUTF8StringEncoding)

3、字符串长度的计算

    // String 型字符串

        let str1:String = "zhou dong yu"

        // 计算字符串中字数长度,不是字符长度,代替 count(str1)
        let num1:Int = str1.characters.count

    // NSString 型字符串

        let str2:NSString = "hello world"

        // 计算字符串中字数长度,不是字符长度
        let num2:Int = str2.length

4、字符串位置的获取

    // String 型字符串

        let str:String = "bei jing ni hao"

        // 获取起始位置,即 0
        let startIndex = str.startIndex

        // 获取结束位置,指 字符串的结束字符 \0 的位置
        let endIndex = str.endIndex

        // 获取指定位置下标值,指从 str.startIndex 开始的第 n 个位置,代替 advance(str.startIndex, 2)
        let index = str.startIndex.advancedBy(2)

        // 获取下标区间值
        let range = str.startIndex.advancedBy(4)...str.startIndex.advancedBy(6)

        // 获取指定位置下标的 前一个值
        let predecessorIndex = str.startIndex.advancedBy(2).predecessor()

        // 获取指定位置下标的 后一个值
        let successorIndex = str.startIndex.advancedBy(2).successor()

5、字符串成员的引用(取字符)

    // String 型字符串

        let str1:String = "bei jing ni hao"

        // 取第5个字符
        let substr1:String = str1.substringWithRange(str1.startIndex.advancedBy(4)...str1.startIndex.advancedBy(4))

    // NSString 型字符串

        let str2:NSString = "bei jing ni hao"

        // 取第5个字符
        let substr2:unichar = str2.characterAtIndex(4)

6、字符串的连接

    // String 型字符串

        let str1:String = "bei "
        let str2:String  = "jing "

        // 使用 "+" 号连接两个字符串
        var str3:String = str1 + str2

        // 在字符串的末尾拼接字符串,代替 str3.extend("123456789")
        str3.write("123456789")

        // 参数和返回值都为 String 型
        let str4:String = str1.stringByAppendingString(str2)

        // 参数和返回值都为 String 型
        let str5:String = str1.stringByAppendingFormat(str2)
        let str6:String = str1.stringByAppendingFormat("%@", "jing huan ying ni")

    // NSString 型字符串

        let str7:NSString = "bei "
        let str8:NSString  = "jing "

        // 参数和返回值都为 String 型
        let str9:String = str7.stringByAppendingString((str8 as String))

        // 参数和返回值都为 NSString 型
        let str10:NSString = str7.stringByAppendingFormat(str8)
        let str11:NSString = str7.stringByAppendingFormat("%@", "jing huan ying ni")

        // NSMutableString 型字符串
        let str12:NSMutableString = "bei "

        // 追加
        str12.appendString("jing ")

        // 格式化追加
        str12.appendFormat("age is %d", 18)

7、字符串的比较

    // String 型字符串

        let str1:String = "bei jing"
        let str2:String = "BEI JING"

        // 判读两个字符串是否相等
        let bl1:Bool = str1 == str2

        // 判断字符串是否为空
        let bl2:Bool = str1.isEmpty

        // 判断字符串前缀
        let bl3:Bool = str1.hasPrefix("be")

        // 判断字符串后缀
        let bl4:Bool = str2.hasSuffix("ing")

        // 比较两个字符串
        let result1:NSComparisonResult = str1.compare(str2)

        // 忽略大小写比较
        let result2:NSComparisonResult = str1.caseInsensitiveCompare(str2)

    // NSString 型字符串

        let str3:NSString = "bei jing"
        let str4:NSString  = "BEI JING"

        // 判读两个字符串是否相等
        let bl5:Bool = str3 == str4

        // 判读两个字符串是否相等
        let bl6:Bool = str3.isEqual(str4)

        // 判读两个字符串是否相等
        let bl7:Bool = str3.isEqualToString(str4 as String)

        // 判断字符串前缀
        let bl8:Bool = str3.hasPrefix("be")

        // 判断字符串后缀
        let bl9:Bool = str3.hasSuffix("ing")

        // 忽略大小写比较
        let result3:NSComparisonResult = str3.compare(str4 as String)
        let result4:NSComparisonResult = str3.caseInsensitiveCompare(str4 as String)

8、字符串的大小写转换

    // String 或 NSString 型字符串 返回值都为 String 型

        let str1 = "bei JING"

        // 将字符串转换为大写
        let str2 = str1.uppercaseString

        // 将字符串转换为小写
        let str3 = str1.lowercaseString

        // 将字符串的单词首字母大写
        let str4 = str1.capitalizedString

9、字符串与数字的相互转换

    // String 型字符串

        // 字符 转 数字

            let char:Character = "A";

            var charVal1:Int = 0

            // 遍历字符转换为的字符串
            for charStr in String(char).unicodeScalars {

                // 将取出的字符转换为 Int 型数字
                charVal1 = Int(charStr.value)
            }

        // 字符串 转 数字

            // 数字型字符串 转 Int 型数字,代替 intStr.toInt()
            let intStr:String = "64";           let intVal1:Int? = Int(intStr)

            // 数字 转 字符
            let intVal2 = 65;                   let charVal2:Character = Character(UnicodeScalar(intVal2))

        // 数字 转 字符串

            // Int 型数字 转 字符串
            let intVal3:Int = 123;              let intStr1:String = intVal3.description

            // Int32 型数字 转 字符串
            let int32Val1:Int32 = 32;           let int32Str1:String = int32Val1.description

            // Int64 型数字 转 字符串
            let int64Val1:Int64 = 64;           let int64Str1:String = int64Val1.description

            // Float 型数字转 字符串
            let floatVal1:Float = 2.1;          let floatStr1:String = floatVal1.description

            // Double 型数字转 字符串
            let doubleVal1:Double = 162.1;      let doubleStr1:String = doubleVal1.description

            // Bool 型 转 字符串
            let boolVal1:Bool = true;           let boolStr1:String = boolVal1.description

    // NSString 型字符串

        // 字符串 转 数字

            // 字符串 转 Int 型数字
            let intVal4:Int = NSString(string: "6432").integerValue

            // 字符串 转 Int32 型数字
            let int32Val2:Int32 = NSString(string: "32").intValue

            // 字符串 转 Int64 型数字
            let int64Val2:Int64 = NSString(string: "64").longLongValue

            // 字符串 转 Float 型数字
            let floatVal2:Float = NSString(string: "2.1").floatValue

            // 字符串 转 Double 型数字
            let doubleVal2:Double = NSString(string: "162.1").doubleValue

            // 字符串 转 Bool 型
            let boolVal2:Bool = NSString(string: "false").boolValue

10、在字符串中查找子串的位置

    // NSString 型字符串

        let str1:NSString = "bei jing nin hao nin hao"
        let str2:String = "nin"

        // 顺序查找

            // 从前往后查找,找到第一个即停止查找
            let range1 = str1.rangeOfString(str2)

            // 或者 if(range1.length == 0), location 位置,length 长度
            range1.location == NSNotFound ? print("not found") : print(range1)

        // 条件查找
        /*
            CaseInsensitiveSearch = 1,               // “A”等同于“a”,不分大小写查找
            LiteralSearch = 2,                       // Unicode 的点对点比较。它只在所有字符都用相同的方式组成的情况下才会返回相等。
            BackwardsSearch = 4,                     // 在字符串的末尾开始反向搜索
            AnchoredSearch = 8,                      // 只考虑搜索的起始点(单独使用)或终止点(当与 NSBackwardsSearch 结合使用时)。
                                                     // 这个方法可以用来检查前缀或者后缀,以及大小写不敏感(case-insensitive)或者
                                                     // 音调不敏感(diacritic-insensitive)的比较。

            NumericSearch = 64,                      // 它对字符串里的数字排序

            DiacriticInsensitiveSearch = 128,        // “A” 等同于 “Å” 等同于 “Ä.”
            WidthInsensitiveSearch = 256,            // 一些东亚文字(平假名和片假名)有全宽与半宽两种形式
            ForcedOrderingSearch = 512,
            RegularExpressionSearch = 1024           // 使用正则表达式搜索
        */

            // 从后往前查找,找到第一个即停止查找
            let range2 = str1.rangeOfString(str2, options: NSStringCompareOptions.BackwardsSearch)

            range2.location == NSNotFound ? print("not found") : print(range2)

        // 范围内查找

            // 在某个范围内查找
            let range3 = str1.rangeOfString(str2,
                                    options: NSStringCompareOptions.CaseInsensitiveSearch,
                                      range: NSMakeRange(8, 10))

            range3.location == NSNotFound ? print("not found") : print(range3)

11、字符串子串的提取(取子串)

    // String 型字符串

        let str1:String = "今天天气真不错,是风和日丽的,我们下午没有课,是心情也不错"

        // 从某个位置开始到结尾
        let str2:String = str1.substringFromIndex(str1.startIndex.advancedBy(8))

        // 从开始到某个位置
        let str3:String = str1.substringToIndex(str1.startIndex.advancedBy(18))

        // 某个范围内
        let str4:String = str1.substringWithRange(str1.startIndex.advancedBy(10)...str1.startIndex.advancedBy(15))

    // NSString 型字符串

        let str5:NSString = "今天天气真不错,是风和日丽的,我们下午没有课,是心情也不错"

        // 从某个位置开始到结尾
        let str6:String = str5.substringFromIndex(8)

        // 从开始到某个位置
        let str7:String = str5.substringToIndex(18)

        // 某个范围内
        let str8:String = str5.substringWithRange(NSMakeRange(10, 6))

12、字符串切割

    // String 型字符串

        let str1:String = "chen$chao$ni$hao$ma"
        let str2:String = "bei$jing#ni@hao&ma"

        // 字符串 按照字符 切割
        let arr1:Array = str1.componentsSeparatedByString("$")

        // 字符串 按照字符集 切割
        let arr2:Array = str2.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: "$#@&"))

    // NSString 型字符串

        let str3:NSString = "chen$chao$ni$hao$ma"
        let str4:NSString = "bei$jing#ni@hao&ma"
        let str5:NSString = "Users/JHQ0228/Desktop"

        // 字符串 按照字符 切割
        let arr3:Array = str3.componentsSeparatedByString("$")

        // 字符串 按照字符集 切割
        let arr4:Array = str4.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: "$#@&"))

        // 自动按照 "/" 分割字符串
        let arr5:Array = str5.pathComponents

13、字符串的插入

    // String 型字符串

        var str1:String = "bei jing ying ni "

        // 指定位置插入字符,str1.endIndex 字符串末尾位置
        str1.insert("!", atIndex: str1.endIndex)

        // 指定位置插入字符串,替代 str1.splice
        str1.insertContentsOf("huan ".characters, at: str1.startIndex.advancedBy(9))

    // NSMutableString 型字符串

        let str2:NSMutableString = "bei jing ying ni"

        // 指定位置插入字符串
        str2.insertString("huan ", atIndex: 9)

        // 重写全部字符串
        str2.setString("nan jing huan ying ni")

14、字符串的删除

    // String 型字符串

        var str1:String = "bei jing ren min huan ying nin !"

        // 指定位置删除字符 "!"
        str1.removeAtIndex(str1.endIndex.predecessor())

        // 指定范围删除字符串 "ren min "
        str1.removeRange(str1.startIndex.advancedBy(9)...str1.startIndex.advancedBy(16))

        // 删除全部字符串
        str1.removeAll(keepCapacity: true)

    // NSMutableString 型字符串

        let str2:NSMutableString = "bei jing ren min huan ying nin !"

        // 删除指定范围的字符串
        str2.deleteCharactersInRange(NSMakeRange(9, 8))

15、字符串的替换

    // String 型字符串

        var str1:String = "bei jing huan ying nin !"

        // 用字符替换指定位置的字符串
        str1.replaceRange(str1.startIndex...str1.startIndex.advancedBy(2), with: "I")

    // NSMutableString 型字符串

        var str2:NSMutableString = "bei jing huan ying nin !"

        // 替换指定位置的字符串
        str2.replaceCharactersInRange(NSMakeRange(9, str2.length - 9), withString: "ni hao")

        // 查找并替换指定的字符串
        str2.replaceOccurrencesOfString("in",
                             withString: "IN",
                                options: NSStringCompareOptions.LiteralSearch,
                                  range: NSMakeRange(0, str2.length))

iOS - Swift String 字符串的更多相关文章

  1. iOS swift String 换行显示

    在oc中换行的方式 NSString *str = @" aaaaa \ bbbbb \ cccc \ "; swift中这种方式不可用 ,swift中换行采用新的方双三引号 &q ...

  2. 窥探Swift之字符串(String)

    之前总结过Objective-C中的字符串<Objective-C精选字符串处理方法>,学习一门新语言怎么能少的了字符串呢.Swift中的String和Objective-C语言中NSSt ...

  3. iOS开发零基础--Swift教程 字符串的利用

    字符串的介绍 字符串在任何的开发中使用都是非常频繁的 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"" ...

  4. 奔五的人学ios:swift竟然没有字符串包括,找个简单的解决方法

    swift关于字符串的推断中 有前导.有后缀 两个方法.竟然没有包括推断. 经过学习找了个简单的解决方法: extension String { func has(v:String)->Bool ...

  5. ios swift学习日记4-字符串和字符

    近期ios的swift语言好像火了起来,本人没有objectc的基础,但之前是有c跟java的基础的. 从这几天開始学习ios的swift语言,后期以博客形式公布.这里提供一本翻译的英文版的swif书 ...

  6. iOS十六进制和字符串的相互转换

    转换代码,崩溃日志有些是十六进制 NSString *dictString = [dict JSONFragment];//组合成的 dictString==={"content" ...

  7. Swift学习—字符串&amp;数组&amp;字典

    字符串 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"",Swift中字符串"" ...

  8. Swift - 获取字符串的MD5值

    MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有MD5实现. ...

  9. [ Java学习基础 ] String字符串的基本操作

    字符串的拼接 String字符串虽然是不可变的字符串,但也同样可以进行拼接,只是会产生一个新的对象.String字符串拼接的时候可以使用"+"运算符或String的concat(S ...

随机推荐

  1. CSS------添加注释框

    my.html <div><a href="#" class="tip">你好<span><k>哈哈哈哈< ...

  2. linux(centos 6)下记录所有用户的操作以及ip、时间

    编辑/etc/profile文件,在文件末尾加入下面代码: [root@iZ23nn1p4mjZ root]# vi /etc/profile history USER=`whoami` USER_I ...

  3. hdu 4665

    转载一下  用的搜索   竟然过了 ............代码 ....... #include<stdio.h> #include<string.h> #include&l ...

  4. 使用Newtonsoft.Json序列化和反序列化对象(源码)

    Json数据格式,简单而强大. 使用Json,不得不提到Newtonsoft.Json,它帮助我们更方便的使用Json,当然,不使用它也是可以的,还有许多方法将对象序列化成Json字符串,暂且不提. ...

  5. express不是内部命令解决办法

    安装nodejs后,安装express,cmd下命令:npm install express -g;之后敲入express -V会提示不是内部命令,是因为, 4.0版本中将命令工具分家出来了,所以我们 ...

  6. spring笔记(一)

    这几日,在看spring框架的知识,了解了一下spring的IoC核心,AOP的概念,然后剩下的其实就是Spring对于其他的java服务的封装:ORM,web, JMS,JMX等. 坦白地说,我并没 ...

  7. ubuntu 开机进入不了图形界面

    在开机的时候有注意到空间不足.第二天重启的时候进入不了系统. 但是 ctrl + alt _F6 可以进入shell  . 于是估计是空间不足导致进入不了系统. 找到哪里文件夹空间异常的大就可以解决问 ...

  8. 视音频编解码学习工程:JPEG分析器

    =====================================================视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习工 ...

  9. k8s日志收集方案

    k8s日志收集方案 三种收集方案的优缺点: 下面我们就实践第二种日志收集方案: 一.安装ELK 下面直接采用yum的方式安装ELK(源码包安装参考:https://www.cnblogs.com/De ...

  10. centos下etcd集群安装

    先仔细了解学习etcd 官方: https://github.com/etcd-io/etcd https://www.cnblogs.com/softidea/p/6517959.html http ...