Swift_String>SubstringWithRange用法

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的单位的位置

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值