iOS - Swift String 字符串

前言

    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))
时间: 2024-08-01 15:04:21

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

ios swift string 类型转化为CGfloat给CGRectMake

问题描述 ios swift string 类型转化为CGfloat给CGRectMake var currentNodeName:String! func parser(parser: NSXMLParser, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: [NSObject : AnyObject]!) {

ios-IOS SWIFT 判断字符串是否含有字母

问题描述 IOS SWIFT 判断字符串是否含有字母 iOS 如和判断字符串中是否含有字母,用swift写.网上给的没弄出来,希望小伙伴们能给个好的例子 解决方案 判断是否包含字母 let string = "输入检测字符"; for char in string.utf8 { if (char > 64 && char < 91) || (char > 96 && char < 123) { print("字符串中包含

窥探Swift之字符串(String)

之前总结过Objective-C中的字符串<Objective-C精选字符串处理方法>,学习一门新语言怎么能少的了字符串呢.Swift中的String和Objective-C语言中NSString还是区别不小的,Swift中的String又回归了正常状态,使用起来更为方便快捷.本篇博客的主题就是Swift中的字符串类型String,String在Swift中让人省心了不少.今天这篇博客就好好的认识一下Swift中的String. 一.字符串拷贝 在Swift中的字符串拷贝直接可以使用=号来操作

详解Swift中的Characters字符类型与String字符串类型_Swift

一.引言 Swift中提供了String类型与Characters类型来处理字符串和字符数据,Swift中的String类型除了提供了许多方便开发者使用的方法外,还可以与Foundation框架的NSString类进行转换,使用起来十分方便. 二.String基础 在Swift中,使用双引号来定义字符串,开发者可以通过如下代码来创建一个字符串常量: let str = "Hello, playground" 可以通过下面两种方式来创建空字符串: let str1 = "&qu

掌握 Swift 的字符串细节

本文讲的是掌握 Swift 的字符串细节, 原文地址:Mastering Swift: essential details about strings 原文作者:Dmitri Pavlutin 译文出自:掘金翻译计划 译者:Tuccuay 校对者:oOatuo , lsvih 掌握 Swift 的字符串细节 String 类型在任何编程语言中都是一个重要的组成部分.而用户从 iOS 应用的屏幕上能读取到最有效的信息也来自文本. 为了触及更多的用户,iOS 应用必须国际化以支持大量现代语言.Uni

iOS - Swift Enum 枚举

前言 枚举声明的类型是囊括可能状态的有限集,且可以具有附加值.通过内嵌(nesting),方法(method),关联值(associated values) 和模式匹配(pattern matching) 枚举可以分层次地定义任何有组织的数据. 和 switch 语句类似,Swift 中的枚举乍看之下更像是 C 语言中枚举的进阶版本,即允许你定义一种类型,用于表示普通事情中某种用例.不过深入挖掘之后,凭借 Swift 背后特别的设计理念,相比较 C 语言枚举来说其在实际场景中的应用更为广泛.特别

ios swift 多个界面,viewcontroller应该怎么写呢?

问题描述 ios swift 多个界面,viewcontroller应该怎么写呢? ios swift 多个界面,viewcontroller应该怎么写呢?或者说怎么控制?不用storyboard 解决方案 你是说不同界面的跳转吗? 跳转可以这样写 let viewCro = ViewController.init() // 假如用xib的话,用下面这句初始化 // let viewCro = ViewController.init(nibName:nibName, bundle:bundle)

XE4 for ios 谨慎处理字符串

   由于xe4 for ios  里面的字符串处理有变化,具体可以参考官方文档,这两天帮一个朋友调试ios 的 应用,由于没有注意这一块,折腾了很长时间.特此记录下来,希望其他人不要走弯路. 以下面代码为例:   function myDecodestr(const AString:string):string; const // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Java String字符串补0或空格的实现代码_java

废话不多说了,关键代码如下所示: package cn.com.songjy; import java.text.NumberFormat; //Java 中给数字左边补0 public class NumberFormatTest { public static void main(String[] args) { // 待测试数据 int i = 1; // 得到一个NumberFormat的实例 NumberFormat nf = NumberFormat.getInstance(); /