2016年11月14日 星期一

swift3 擷取特定字串 (更:Swift4)

Swift4
原本swfit3的方法雖然笨,但至少有得到所想要的效果。但是在swift4那方法會出現警告,沒意外是即將停用。所以就改寫成以下方法

let Bitrh = "2017-09-21 09:17:07 +0000"
        let year = Bitrh.prefix(4)//取得字串到第幾字元 Bitrh.prefix(Int)
        print("這是年:\(year)")
        
        let Monthstart = Bitrh.index(Bitrh.startIndex, offsetBy: 5)//從第幾字元開始算起
        let Monthend = Bitrh.index(Monthstart, offsetBy: 2)//在Monthstart中從頭取自第幾字元
        let month = Bitrh[Monthstart..<Monthend]//利用rang的方式取出該字元Monthstart是起始至Monthend,因Monthend只要求兩個字元所以month就會印出兩字元
        print("這是月:\(month)")

        let Daystart = Bitrh.index(Bitrh.startIndex, offsetBy: 8)//同月份做法
        let Dayend = Bitrh.index(Daystart, offsetBy: 2)
        let Day = Bitrh[Daystart..<Dayend]

        print("這是日:\(Day)")
打印出來結果就跟swift3是一樣的效果


Swift3
因為某些原因用到了擷取字串,下面所有"111"是用來計算字元用的所以隨便輸入皆可


let date = "2016-11-15"
        
        let dateString = String(describing: date)
        
        print(dateString)
        取出前四個字元使用.substring(to:String.Index)
        let year = dateString.substring(to: "1111".endIndex)
        
        print("年:\(year)")
        從第幾字元開始取用使用.substring(form:String.Index)
        let birthmonth = dateString.substring(from: "11111".endIndex);
        因為只要月份兩字元所以在做一次第一步驟
        let month = birthmonth.substring(to: "11".endIndex)
        
        print("月:\(month)")
        再來第二步驟已經從月開始所以直接在呼叫第二步驟宣告的值在做一次第二步驟
        let birthday = birthmonth.substring(from: "111".endIndex)
        最後再重複一次第一步驟
        let day = birthday.substring(to: "11".endIndex);
        

        print("日:\(day)")

這樣print出來會是這樣,如下圖:

2 則留言:

  1. 版主您好
    想請問
    如果我是在不知道這string的長度的情況下
    要擷取字串 像是取第一個 “-”之前的字串
    或是取第一個“-”到第二個“-”之間的字串
    在不知道位於字串的第幾位時,有辦法做到嗎
    感謝

    回覆刪除
    回覆
    1. 假設你知道這個字串裡有特殊字串,是可以先做特殊字串處理,知道他的位子,在執行你要的動作。近期較忙沒有空可以做Demo給你看....如果有摸索出來再一起分享^^

      刪除