Swift - 擴(kuò)展 String 使其杠杠的

Swift的擴(kuò)展特性杠杠的,方便對(duì)其升級(jí)打造

下面擴(kuò)展了 String 一些常用方法,方便項(xiàng)目使用
暫時(shí)升級(jí)那么多了,大家也可以根據(jù)需要進(jìn)行擴(kuò)展
其實(shí)很多新東西都是從已有的東西中混合整成的

“我們”的世界一切都不是憑空出現(xiàn)的蘑拯,所謂的創(chuàng)新也只是把已有的東西走了多幾步奋早,在淺層面就很難看出來(lái)而已娱颊,如歸根到底還是有其根源。雖說(shuō)走多幾步髓介,但是談何容易惕鼓?

extension String {
    /*
    * 判斷是否存在的字符串
    */
    //方式一 使用字符串 + 字符 + 數(shù)組等混合而成
    func hasContains(contains: String) -> Bool {
        var containsArr = [String]()
        var console = 0
        for char in contains.characters {
            containsArr.append(String(char))
        }
        for char in self.characters {
            if String(char) == containsArr[console] {
                console  += 1
                if console >= containsArr.count {
                    break
                }
            } else {
                console = 0
            }
        }
        return console == containsArr.count ? true : false
    }
    
    //方式二 艸,方式一好不容易搞出來(lái)唐础,居然還有方式二這樣家伙
    func has(str: String) -> Bool {
        return (self.rangeOfString(str) != nil) ? true : false
    }

   //方式三箱歧,人生最悲催的事,莫過(guò)到最后發(fā)現(xiàn) Swift 自身已存在解決此問(wèn)題的方法
   // - > self.containsString("str")



    //截取指定字符 返回前面部分
    func cutRetrunTheFirstPart(strCut: String) -> String {
        guard !strCut.isEmpty else { return self }
        let range = self.rangeOfString(strCut)
        let index = range?.startIndex
        let str = self.substringToIndex(index!)
        return str
    }
    //截取指定字符 返回后面部分
    func cutRetrunTheLastPart(strCut: String) -> String {
        guard !strCut.isEmpty else { return self }
        let range = self.rangeOfString(strCut)
        let index = range?.endIndex
        let str = self.substringFromIndex(index!)
        return str
    }
    //消滅到指定位的字符串 -> 返回剩下的
    mutating func cutIndexReturnB(adIndex: Int) -> String {
        guard adIndex < self.characters.count else { return self }
        self.removeRange(self.startIndex..<self.startIndex.advancedBy(adIndex))
        return self
    }
    //取到指定位的字符串 -> 消滅剩下的
    mutating func cutIndexReturnA(adIndex: Int) -> String {
        guard adIndex < self.characters.count else { return self }
        self.removeRange(self.startIndex.advancedBy(adIndex)..<self.endIndex)
        return self
    }
    // 判斷首個(gè)字符串的位置
    func charFirstIndex(str: String) -> Int? {
        guard self.containsString(str) else { return nil }
        
      return self.componentsSeparatedByString(str)[0].characters.count
    }
    
    //分割字符串 - 遇見(jiàn)多少個(gè)就分割多少個(gè)
    func split(str: String) -> [String] {
        if str.isEmpty {
            var strArr = [String]()
            for char in self.characters {
                strArr.append(String(char))
            }
            return strArr //空的話一膨、無(wú)縫分割
        }
        return self.componentsSeparatedByString(str)
    }
    //str.characters.split{$0 == "呀邢、"}.map(String.init)

    //移除前面指定個(gè)數(shù)字符- 可以繼續(xù)擴(kuò)展 移除 幾號(hào) 到幾號(hào) 或者定點(diǎn)清除
    mutating func cutIndexRetrunLastPart(index: Int) -> String {
    guard self.characters.count > index else {
            return self   } //如果超過(guò)該字符長(zhǎng)度,默認(rèn)不成功豹绪,返回自身
    self.removeRange(self.startIndex..<self.startIndex.advancedBy(index))
    return self
    }


    //顛倒字符串
    func reverse() -> String {
        let str = self.split("").reverse()
        var newStr = ""
        for s in str {
            newStr += s
        }
        return newStr
    }
    
    //統(tǒng)計(jì)字符串個(gè)數(shù)
    func howMany(str: String) -> Int {
        let strArr = str.split("")
        var console = 0 //控制字符
        var times = 0
        for char in self.characters {
            if String(char) == strArr[console] {
                console += 1
                if console >= strArr.count {
                    console = 0
                    times += 1
                }
            } else {
                console = 0
            }
        }
        return times
    }
}

字符串顛倒

extension String {
    func reverseString() -> String {
        var cchars = self.cStringUsingEncoding(NSUTF8StringEncoding)!
        for i in 0..<cchars.count/2 {
            let temp = cchars[i]
            cchars[i] = cchars[cchars.count - i  - 2]
            cchars[cchars.count - i - 2] = temp
        }
        return String(UTF8String: &cchars)!
    }
    
    
    func reverseString2() -> String {
        let cchars = self.cStringUsingEncoding(NSUTF8StringEncoding)!
        var cArray = [CChar]()
        cchars.map { cArray.insert($0, atIndex: 0) }
        cArray.removeFirst()
        cArray.append(0)
        return String(UTF8String: &cArray)!
    }
    
    func reverseString3() -> String {
        var rs = ""
        for c in self.characters {
            rs.insert(c, atIndex: rs.startIndex)
        }
        return rs
    }
}

使用:

let str = "我是誰(shuí)价淌? 你又是誰(shuí)? 他又是誰(shuí)瞒津?"
str.has("我是誰(shuí)蝉衣?") // = true
str.hasContains("你又是誰(shuí)?") // = true
str.split(" ") // = ["我是誰(shuí)巷蚪?", "你又是誰(shuí)病毡?", "他又是誰(shuí)?"]
str.reverse() // = "屁柏?誰(shuí)是又他 啦膜?誰(shuí)是又你 有送?誰(shuí)是我"
str.howMany("誰(shuí)") // = 3

let movie = "波多野結(jié)衣"
movie.cutRetrunTheFirstPart("野") // = "波多"
movie.cutRetrunTheLastPart("野")  // = "結(jié)衣"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市功戚,隨后出現(xiàn)的幾起案子娶眷,更是在濱河造成了極大的恐慌似嗤,老刑警劉巖啸臀,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異烁落,居然都是意外死亡乘粒,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門伤塌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)灯萍,“玉大人,你說(shuō)我怎么就攤上這事每聪〉┟蓿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵药薯,是天一觀的道長(zhǎng)绑洛。 經(jīng)常有香客問(wèn)我,道長(zhǎng)童本,這世上最難降的妖魔是什么真屯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮穷娱,結(jié)果婚禮上绑蔫,老公的妹妹穿的比我還像新娘。我一直安慰自己泵额,他們只是感情好配深,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著嫁盲,像睡著了一般篓叶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亡资,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天澜共,我揣著相機(jī)與錄音,去河邊找鬼锥腻。 笑死嗦董,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瘦黑。 我是一名探鬼主播京革,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼奇唤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了匹摇?” 一聲冷哼從身側(cè)響起咬扇,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎廊勃,沒(méi)想到半個(gè)月后懈贺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坡垫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年梭灿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冰悠。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堡妒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出溉卓,到底是詐尸還是另有隱情皮迟,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布桑寨,位于F島的核電站伏尼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏西疤。R本人自食惡果不足惜烦粒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望代赁。 院中可真熱鬧扰她,春花似錦、人聲如沸芭碍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)窖壕。三九已至忧勿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞻讽,已是汗流浹背鸳吸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留速勇,地道東北人晌砾。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像烦磁,于是被迫代替她去往敵國(guó)和親养匈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哼勇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 既然有了選擇,就不能放其不生寸草亦或叢生雜草呕乎。不喜歡長(zhǎng)篇大論的寫一些東西积担,因?yàn)椴簧瞄L(zhǎng)。只是偶爾會(huì)因?yàn)榭吹揭槐咎貏e的...
    AH的啊哈哈閱讀 549評(píng)論 2 2
  • 一直認(rèn)為用語(yǔ)言表達(dá)的感激都是蒼白無(wú)力的猬仁,做作的修辭更是對(duì)這份真摯情感的玷污帝璧,至于那些詞語(yǔ),它們自身的空洞更是讓我放...
    尋梵何閱讀 156評(píng)論 0 0
  • 身邊的朋友在我這個(gè)年紀(jì)大多結(jié)婚生子,男生賺錢養(yǎng)家漱病,女生圍著孩子买雾。我發(fā)現(xiàn)了一個(gè)很奇怪的現(xiàn)象:大多數(shù)男生結(jié)了婚反而更自...
    羽墨_閱讀 269評(píng)論 0 0
  • 人生難得有個(gè)閨蜜,開(kāi)心了就笑杨帽,不高興了就哭漓穿,一起走過(guò)的路,還可以慢慢的回憶注盈。晃危。
    花兒語(yǔ)樹(shù)閱讀 113評(píng)論 0 0