您的位置:首页 > 移动开发 > Swift

Swift_String>SubstringWithRange用法

2015-07-17 15:05 344 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iOS_And_Swift/article/details/46927703

1.链接字符串用法

var str1 = "我"
var actionStr = "在"
var sthStr = "吃苹果"
var allStr = str1 + actionStr + sthStr //可以直接相加
allStr += ",吃完了苹果"//+= 也可以连接字符串

2.判断字符串

if allStr == "我在吃苹果"{ //直接可以等号
print(allStr)
}
if allStr.isEmpty {//判断是否是空字符串
print("allstr is empty")
}

3.截断字符串

/* 字符串截取 */   错误写法
var str:String = "Hello, World!"
println(str.substringToIndex(3))
println(str.substringFromIndex(3))

然而,奇怪的是第三种方法却怎么也用不了

var r = NSRange(location: 1,length: 2)

调用substringWithRange() 函数总是语法有误:

var str1:String = str.substringWithRange(r) //语法有误!

解决方案:
解决方案(一):把String类的变量转存为NSString类型【不推荐】

var nsString: NSString = str
println(nsString.substringWithRange(r))

解决方案(二):对String类进行扩展,重载substringWithRange()

extension String {
func substringWithRange(range: NSRange) -> String! {
var str1 = self.substringFromIndex(range.location)
var str2 = str1.substringToIndex(range.length)
return str2
}

有了这个扩展,就可以按照NSString的方式来截取字符串啦!
完整演示代码:

var str:String = "Hello, World!"
/* import Foundation之前,子串截取方法不能使用 */
// println(str.substringToIndex(3))    //error
// println(str.substringFromIndex(3))  //error
import Foundation
/* import Foundation之后,下面这两个函数可以直接使用 */
println(str.substringToIndex(3))
println(str.substringFromIndex(3))
var r:NSRange = NSMakeRange(3,5)
/* String类的变量不能直接这样取中间子串 */
// println(str.substringWithRange(r))  //error
// 解决方案(一):转换为NSString类的
var nsString: NSString = str
println(nsString.substringWithRange(r))
// 解决方案(二):扩展String类
extension String {
func substringWithRange(range: NSRange) -> String! {
var str1 = self.substringFromIndex(range.location)
var str2 = str1.substringToIndex(range.length)
return str2
}
}
println(str.substringWithRange(r))

还没有结束。。。。。。。。。。。。。。。。。。。。。。。。。。。

为什么系统的方法不能 用呢?
其实还是能用的,大招来了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

llStr = allStr.substringWithRange( Range<String.Index> (start: advance(allStr.startIndex, 0), end: advance(allStr.endIndex, -3)))
//完全正确 没有报错。Rang返回的就是<String>Index>类型,

让我们来看看 advance()is what??

/// Return the result of advancing `start` by `n` positions.  If `T`
/// models `RandomAccessIndexType`, executes in O(1).  Otherwise,
/// executes in O(`abs(n)`).  If `T` does not model
/// `BidirectionalIndexType`, requires that `n` is non-negative.
func advance<T : ForwardIndexType>(start: T, n: T.Distance) -> T

官方解释是返回一个位置,对的就是一个location,对于OC大家很熟悉的NSRang的第一个参数,
然而咋SwiftRang中的第二个参数也是一个location,还是觉得别扭,好吧。但是用2月就很OK了。
完整代码如下:

var str1 = "我"
var actionStr = "在"
var sthStr = "吃苹果"
var allStr = str1 + actionStr + sthStr //拼接字符串
allStr += ",吃完了苹果"

if allStr == "我在吃苹果"{//判断是否相等
print(allStr)
}
if allStr.isEmpty {//判断是否是空串
print("allstr is empty")
}

println(allStr)
allStr = allStr.substringWithRange( Range<String.Index> (start: advance(allStr.startIndex, 0), end: advance(allStr.endIndex, -3)))//大家熟悉的OC中的SubStringWithRange 哈哈
if str1 == "我" {
print(allStr)
}

//advance(allStr.startIndex, 2) 这只是一个位置,就是allStr字符串的开始向右移动2的单位的位置

好了,大部分用常用的都已经说了,谢谢观看。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: