swift 字符串

来源:互联网 发布:手机python编程软件 编辑:程序博客网 时间:2024/06/08 15:16

下面是一些swift字符串的一些用法, 包括 从字符串的创建, 字符串的增删改查基本操作,字符串比较, 字符串的各种判断, 再到获取某个字符串中的某个字符, 对字符串进行转码, 从控制台输入字符串 等等, 你想要的都在这(欢迎大家补充),废话不多说了, 下面是代码, 代码的注释已经很清楚了

////  main.swift//  StringPra////  Created by 刘瑞龙 on 15/8/27.//  Copyright © 2015年 V1. All rights reserved.//import Foundation/*编程环境为xcode 7.0 beta 版*//*--------------------(1)定义一个字符串--------------------------*///变量字符串, 字符串的值可以随意更改, 可赋初始值也可不赋, 不赋初始值直接使用, 编译都不会通过var str1_1:String//类型推断, 当直接赋值的时候, 可以不指名类型, 编译器会进行类型推断, 把 str1Test 定义为String 类型var str1_2 = "123"//常量字符串, 我这个版本可以不进行初始化, 可以使用时再初始化, 并且只能初始化一次, 不能再更改, 赋值时会有类型推断, 所以这里不用写类型了let str1_3:String/*--------------------(2)在String中的转义字符--------------------------*//*\0    空字符\\    反斜杠\t    制表符\n    换行符\r    回车符\”    双引号\’    单引号*///转义字符的用法print("\"我的两边应该有双引号\"")/*打印结果:  "我的两边应该有双引号"*//*--------------------(3)   /() 的用法--------------------------*///在OC中会有 NSString * str = [NSString stringWithFormat:@"%@%d", string, i]; 的用法//C语言中有这样的用法 printf("%d", i);//在swift 不在使用这样的转换字符, 而是用 /() 来拼接或者打印字符串  eg:var str3_1 = "我今年\(99)岁了"print(str3_1)    //对于字符串, 可以直接这么打印/*输出结果: 我今年99岁了*/var int1 = 10print("我有\(int1)个苹果")/*输出结果: 我有10个苹果*//*--------------------(4) 字符串的拼接--------------------------*//*NSString * str = [NSString stringWithFormat:@"%@%d", string, i];OC中的拼接字符串的方法,比较麻烦 swift 可以直接使用 + +=  这些符号直接进行拼接:eg:*/let str4_1 = "123"let str4_2 = "456"let str4_3 = str4_1 + str4_2print(str4_3)/*输出结果: 123456*///对于可变字符串var str4_4 = "hello"let str4_5 = "world"str4_4 += str4_5print(str4_4)/*输出结果: helloworld*///可能有人试图用类似于OC的字符串拼接方式进行拼接, 但发现括号里填的不是string 类型, 而是这两个类型, 对于这两个拼接方法一会儿会讲到/*str4_4.append(<#T##c: Character##Character#>)str4_4.append(<#T##x: UnicodeScalar##UnicodeScalar#>)*//*--------------------(5)字符串的比较--------------------------*//*字符串的比较可以直接使用, 逻辑运算符号 >  >= < <= ==进行比较, 比较的标准, 就是从字符串的每一个元素开始, 比较ascii 值, 如果相同就继续向下比较, 知道比出大小 或者 相等*/let str5_1 = "abcdefg"let str5_2 = "abcz"if str5_2 > str5_1 {    print("str5_2 比 str5_1 大")    /*    输出结果: str5_2 比 str5_1 大    */}//其他几个逻辑运算符同理/*同时, OC的compare 比较方法同样适用OC中:[str1 compare str2]    返回值类型是NSComparisonResult其实这是一个枚举 有三个值, NSOrderdAscending  -1  升序, NSOrderdSame 0  相等, NSOrderdDescending不区分大小写的比较:[str1 caseInsensitiveCompare: str2];结果形式同上swift 代码如下:*/let str5_3 = "abcdefg"let str5_4 = "abcz"let resutlt: NSComparisonResult = str5_3.compare(str5_4)   //返回值为 NSComparisonResult 枚举类型switch resutlt {case .OrderedAscending:    print("str5_3 小于 str5_4")case .OrderedSame:    print("str5_3 等于 str5_4")case .OrderedDescending:    print("str5_3 大于 str5_4")}/*输出结果: str5_3 小于 str5_4*///使用这个不区分大小写的比较也是一样的str5_3.caseInsensitiveCompare(str5_4)/*str5_3.compare(<#T##aString: String##String#>, options: <#T##NSStringCompareOptions#>, range: <#T##Range<Index>?#>, locale: <#T##NSLocale?#>)这个方法也和OC总类似, 第二个参数 比较规则(从前到后, 还是从后到前, 不分大小写, 区分大小写 等等), 第三个参数是确定比较位置, 第四个是填本地信息的,直接填nil就行;值得注意的是 第三个参数, 所填的range 是第一个用前面的字符串的这个range的字符串和后者整个字符串相比, 比如, 你用ABCD 和 ABC 相比较, 如果设置range 为(0, 1) 那么你是用 A 和 ABC相比, 而不是A与A相比较eg:*/let str5_5 = "abcab"let str5_6 = "abczz"let range = Range(start: advance(str5_5.startIndex, 3), end: advance(str5_5.endIndex, 0))let str = str5_5.substringWithRange(range)print("str == \(str)")let options: NSStringCompareOptions = .LiteralSearchlet optionResult: NSComparisonResult = str5_5.compare(str5_6, options: options, range: range, locale: nil)//range 为比较str5_5 第3个字符到最好一个字符也就是"ab", 和 整个 str5_6 比较, 所以 str_5 小于 str_6switch optionResult {case .OrderedAscending:    print("str5_5 小于 str5_6")case .OrderedSame:    print("str5_5 等于 str5_6")case .OrderedDescending:    print("str5_5 大于 str5_6")}/*打印结果: str5_5 小于 str5_6*//*--------------------(6)字符串大小写的转换--------------------------*///swift 使用Unicode编码, Unicode 编码 整合了 世界上大部分语言以及emoji表情, 在网站上显示为 ?? 的部分就是emoji表情, 但是在swift中是正常识别的let str6_1 = "a��bcDEfg哈哈哈123"print(str6_1.lowercaseString)let str6_2 = str6_1.uppercaseStringprint(str6_2)/*输出结果:  a��bcdefg哈哈哈123          A��BCDEFG哈哈哈123*//*根据例子结果可以看出来, 这两个方法是对字符串中字母进行处理, 其他的不变:uppercaseString : 将全部字母变为大写lowercaseString : 将全部字母变为小写而且都是重写生成了一个字符串, 而不是在原有字符串进行变化*//*------------(7)判断字符串是否为空 & 判断是否某个前缀 后缀----------*/let str7_1 = ""if str7_1.isEmpty {    print("str7_1  is Empty")    /*    输出结果: str7_1  is Empty    */}let str7_2 = "www.v1.cn"if str7_2.hasPrefix("www") {    print("str7_2 有前缀 www")    /*    输出结果: str7_2 有前缀 www    */}if str7_2.hasSuffix("cn") {    print("str7_2 有后缀 cn")    /*    输出结果: str7_2 有后缀 cn    */}/*--------------------(8)获取字符串的子串--------------------------------*/let str8_1 = "hello world"/*这三个, 后两个就不多说了, 只要会创建index就知道怎么回事了, 下面说下第一个substringWithRange(<#T##aRange: Range<Index>##Range<Index>#>)substringFromIndex(<#T##index: Index##Index#>)substringToIndex(<#T##index: Index##Index#>)*/let indexStart = advance(str8_1.startIndex, 0)  //index 的创建方式let indexEnd = advance(str8_1.startIndex, 5)let range8_1 = Range(start: indexStart, end: indexEnd) //range的创建方式let str8_2 = str8_1[range8_1]        //由于String 实现了 subscript 可以通过[]里填range 的方式 获取子串, 也可以通过填Index来过去characterprint("str8_2 == \(str8_2)")/*输出结果: str8_2 == hello*//*--------------------(9)获取字符串中character--------------------------*///swift 使用Unicode编码, Unicode 编码 整合了 世界上大部分语言以及emoji表情, 在网站上显示为 ?? 的部分就是emoji表情, 但是在swift中是正常识别的//for in 遍历获取每一个characterlet str9_1 = "��ab呵呵"for char in str8_1.characters {    print(char)    /*    输出结果:    ��    a    b    呵    呵    */}//获取某一个character,因为String 类型 实现了subscript, 所以可以通过str[] 中括号中填 index 的方式来获取某个index, 下面来获取str9_1 的第一个字符let index9_1 = advance(str9_1.startIndex, 0)let char = str9_1[index9_1]print("char == \(char)")/*输出结果: char == ��*//*--------------------(10)替换字符串中某一段字符--------------------------*//*//知道怎么创建range, 应该就会知道怎么用这个了, 一个用character替换range内的字符串, 一个是用String来替换range内的字符串, 下面说一下用字符串替换的replaceRange(<#T##subRange: Range<Index>##Range<Index>#>, with: <#T##C#>)replaceRange(<#T##subRange: Range<Index>##Range<Index>#>, with: <#T##String#>)*///定义一个字符串--变量var str10_1 = "123 world"let str10_2 = "hello"let range10_1 = Range(start: advance(str10_1.startIndex, 0), end: advance(str10_1.startIndex, 3))str10_1.replaceRange(range10_1, with: str10_2)print("str10_2 == \(str10_1)")/*输出结果: str10_2 == hello world*//*--------(11)获取字符串中ascii表字符的int值, 并将Int转换成character 和 字符串------*///创建一个只含有, ascii表字符的字符串let str11_1 = "abc"var intStr = ""for char11_1 in str11_1.characters {    var tempInt: Int = 0    for i in String(char11_1).utf8{        tempInt = Int(i)    }    print(tempInt)    /*    输出结果:     97    98    99    */    intStr += String(tempInt) + "--"    //将Int类型转成String类型并且拼接}print("intStr == \(intStr)")/*输出结果 intStr == 97--98--99--*///将整形转化为 character 类型 最终转化为 String 类型let int_11_1 = 97let char11_1: Character = Character(UnicodeScalar(int_11_1))print("the character char11_1 is \(char11_1)")/*输出结果: the character char11_1 is a*/let str11_2 = String(char11_1)print("the string: str11_2 is \(str11_2)")/*输出结果: the string: str11_2 is a*//*--------(12)对swift字符串与utf8字符串进行互转------*//*有些时候, 特别是从服务器发送post请求, 需要对汉语字符串进行处理, swift对字符串转码同样使用的是 OC 中的方法*/let str12_1 = "我是你龙哥"let str12_2 = str12_1.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)print("str12_2 = \(str12_2!)")/*输出结果: str12_2 = %E6%88%91%E6%98%AF%E4%BD%A0%E9%BE%99%E5%93%A5*/let str12_3 = str12_2?.stringByReplacingPercentEscapesUsingEncoding(NSUTF8StringEncoding);print("str12_3 = \(str12_3!)")/*输出结果: str12_3 = 我是你龙哥*//*--------(13)通过scanf 在swift语言中输入字符------*/

要从控制台输入字符串, 首先要说一下怎样和C混编, 首先先建一个C文件, 这时xcode 会提示你是否创建桥接文件, 点 creat bridging header(当然自己建也可以, 如何建等我在发博客会说)
桥接C文件
创建完了就可以在C文件中写这个方法

////  SwiftScanf.c//  StringPra////  Created by 刘瑞龙 on 15/8/27.//  Copyright © 2015年 V1. All rights reserved.//#include <stdio.h>void swiftScanf(char * inputStr){    scanf("%s", inputStr);}

然后在桥接文件中导入这个头文件:
桥接文件

接下来就可以在swft中调用这个方法了, 具体向上边写的那样, 这里在写一遍:

/*--------(13)通过scanf 在swift语言中输入字符------*/var char13_1 = UnsafeMutablePointer<CChar>.alloc(20)  //这个方法生成了一个与C中的字符指针相通的类型swiftScanf(char13_1)    //这是桥接过来的C方法/*C方法实现如下:void swiftScanf(char * inputStr){    scanf("%s", inputStr);}*/let str13_1 = String.fromCString(char13_1)  //将字符指针(即C中的字符串)转化成swift字符串print("输入的字符为: \(str13_1!)")/*输入:     thisisainputchar输出结果: thisisainputchar*/

输入输出结果

说明: 还有一些OC中的方法都可以在swift中用了, 只要有OC基础, 那些就都可以知道怎么用了

下面还有我用来练习字符串的练习题, 大家有兴趣可以练习下

/*--------------------------------------------------------------------*//*-----------------下面是我给字符串添加的一些用来练习的方法------------------*/extension String{    //给变量字符串添加方法, 进行ascii值从小到大排序    mutating func sortString(){        for var i = 1; i < self.characters.count; ++i{            for var j = 0; j < self.characters.count - i; ++j{                let range1 = Range(start: advance(self.startIndex, j), end: advance(self.startIndex, j + 1))                let str1 = self.substringWithRange(range1)                let range2 = Range(start: advance(self.startIndex, j + 1), end: advance(self.startIndex, j + 2))                let str2 = self.substringWithRange(range2)                if str1 > str2 {                    self.replaceRange(range1, with: str2)                    self.replaceRange(range2, with: str1)                }            }        }    }    //添加类方法, 传入一个字符串,根据这个字符串生成一个ascii值从小到大排序的字符串    static func sortStr(var str: String) -> String{        for var i = 1; i < str.characters.count; ++i{            for var j = 0; j < str.characters.count - i; ++j{                let range1 = Range(start: advance(str.startIndex, j), end: advance(str.startIndex, j + 1))                let str1 = str[range1]                let range2 = Range(start: advance(str.startIndex, j + 1), end: advance(str.startIndex, j + 2))                let str2 = str.substringWithRange(range2)                if str1 > str2 {                    str.replaceRange(range1, with: str2)                    str.replaceRange(range2, with: str1)                }            }        }        return str    }    //扩展一个类方法, 传入一个字符串, 根据传入字符串生成一个逆序的字符串    static func inverseStr(str: String) -> String{        var string = ""        for var i = 0; i < str.characters.count; ++i {            let index = advance(str.endIndex, -(i + 1))            string += String(str[index])        }        return string    }    //扩展一个类方法, 传入一个只含有字母的字符串, 根据传入字符串生成一个大小写字母翻转的字符串    static func overStr(str: String) -> String {        var string = ""        for var i = 0; i < str.characters.count; ++i{            let range = Range(start: advance(str.startIndex, i), end: advance(str.startIndex, i + 1))            let subStr = str.substringWithRange(range)            if subStr == subStr.lowercaseString {                string += subStr.uppercaseString            } else if subStr == subStr.uppercaseString {                string += subStr.lowercaseString            }else {                string += subStr            }        }        return string    }    //将字符串 翻转后 ascii 值 + 10    static func encryptCode(code: String) -> String{        var tempStr = ""        for var i = 0; i < code.characters.count; ++i {            let index = advance(code.startIndex, code.characters.count - i - 1)            var cha: Character = code[index]            var tempInt: Int = 0            for j in String(cha).utf8{                tempInt = Int(j) + 10            }            cha = Character(UnicodeScalar(tempInt))            tempStr += "\(cha)"        }        print("\(tempStr)")        return tempStr    }}

欢迎大家补充

0 0
原创粉丝点击