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文件中写这个方法
//// 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
- swift 字符串
- swift 字符串
- Swift-字符串
- Swift 字符串
- swift 字符串
- Swift-字符串
- swift 字符串
- swift字符串
- Swift 字符串
- Swift字符串
- swift字符串
- swift字符串
- Swift 字符串
- swift 字符串
- Swift 字符串
- Swift--字符串和字符
- Swift 字符串+集合(三)
- Swift字符串类型
- 怎样运营APP让用户欲罢不能?
- scanf函数
- 天天说需求,你真的理解需求吗?
- LCS 最长公共子序列
- 51nod 1212 无向图最小生成树(最小生成树)
- swift 字符串
- 产品经理如何有效沟通?
- Java的向上转型与向下转型
- 0002 手动定制原版 Win7 操作系统(一)
- 2014中国机器视觉行业十大知名品牌
- Android常用控件之Toast与AlertDialog的常规用法和自定义用法
- 老板,你知道APP是怎么死的吗?
- Eclipse技巧:[5]eclipse js提示
- 【哈希表除留余数法+BSGS算法求离散对数】POJ Discrete Logging 2417