判斷一個(gè)字符串中是否包含另一個(gè)字符串

問(wèn)題:如何判斷一個(gè)字符串兒是否包含另一個(gè)字符串兒沿腰?

??其實(shí)脆诉,字符串兒String里面本身就包含一個(gè)contains()方法,它可以在一定程度上判斷一個(gè)字符串兒里面是否包含另一個(gè)字符串兒芭商。但是哑了,它比較傻舱馅,所能做的工作有限缰泡,比如說(shuō):

"Hello, July".contains("July")  // 其返回值為true
"Hello, July".contains("july")  // 其返回值應(yīng)該為true,但實(shí)際卻返回false

??contains()方法是嚴(yán)格區(qū)分大小寫(xiě)的代嗤,而這種嚴(yán)格顯然是與我們的要求不符棘钞。對(duì)于我們的題目來(lái)說(shuō),不管它是大寫(xiě)還是小寫(xiě)干毅,只要是包含該字符串兒宜猜,它就符合題目的要求。所以硝逢,我們需要另外想辦法對(duì)這種情況進(jìn)行處理姨拥。為此,可以考慮給String寫(xiě)一個(gè)擴(kuò)展:

extension String {
    
    // 判斷一個(gè)字符串兒是否包含另一個(gè)字符串兒渠鸽,并且不用區(qū)分大小寫(xiě)
    func fuzzyContains(_ string: String) -> Bool {
        return self.uppercased().range(of: string.uppercased()) != nil
    }
}

??我來(lái)解釋一下上面的代碼叫乌。首先,self.uppercased()和string.uppercased()分別將兩個(gè)字符串兒轉(zhuǎn)換成大寫(xiě)字符徽缚。以上面的”Hello憨奸,July”和“July”或者“july”為例,self.uppercased()會(huì)將”Hello凿试,July”中所有的字符全部轉(zhuǎn)換成大寫(xiě)字符排宰,而string.uppercased()則會(huì)將fuzzyContains(_ : )方法中的參數(shù),也就是“July”或者“july”中所有的字符全部轉(zhuǎn)換成大寫(xiě)字符那婉。之所以要做這種轉(zhuǎn)換板甘,就是為了解決上面contains()方法不能正確處理大小寫(xiě)的情況。其次详炬,range(of: )虾啦,這個(gè)方法就厲害了,它主要是返回一個(gè)字符串兒在另一個(gè)字符串兒中的位置痕寓,其結(jié)果為可選類(lèi)型傲醉。如果我們調(diào)用range(of: ),所得到的結(jié)果為nil呻率,那就說(shuō)明子字符串兒不包含在我們檢查的字符串兒中硬毕。如果相反,那就說(shuō)明字字符串兒包含在待檢查的字符串兒中:

判斷一個(gè)字符串兒是否包含另一個(gè)字符串兒.png

??上面的方法已經(jīng)可以解決我們的問(wèn)題了礼仗,但是不夠簡(jiǎn)潔吐咳。還有一種方法逻悠,它可以將轉(zhuǎn)換字符大、小寫(xiě)和判斷是否包含子字符串兒合并到一起:

extension String {
    func fuzzy1Contains(_ string: String) -> Bool {
        return range(of: string, options: .caseInsensitive) != nil
    }
}

"Hello, July".fuzzy1Contains("July")  // 其返回值為true
"Hello, July".fuzzy1Contains("july")  // 其返回值應(yīng)該為true韭脊,實(shí)際返回結(jié)果也為true

extension String {
    func fuzzy2Contains(_ string: String) -> Bool {
        return range(of: string, options: .caseInsensitive, range: nil, locale: nil) != nil
    }
}

"Hello, July".fuzzy2Contains("July")  // 其返回值為true
"Hello, July".fuzzy2Contains("july")  // 其返回值應(yīng)該為true童谒,實(shí)際返回結(jié)果也為true

??也就是說(shuō),不必顯式的進(jìn)行字符串兒大沪羔、小寫(xiě)的轉(zhuǎn)換饥伊,在使用range(of: )這個(gè)方法時(shí),多傳遞一個(gè)參數(shù)caseInsensitive蔫饰。它的作用就是告訴編譯器琅豆,不用嚴(yán)格區(qū)分字符大小寫(xiě)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末篓吁,一起剝皮案震驚了整個(gè)濱河市茫因,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杖剪,老刑警劉巖冻押,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異盛嘿,居然都是意外死亡翼雀,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)孩擂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)狼渊,“玉大人,你說(shuō)我怎么就攤上這事类垦”芬兀” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵蚤认,是天一觀(guān)的道長(zhǎng)米苹。 經(jīng)常有香客問(wèn)我,道長(zhǎng)砰琢,這世上最難降的妖魔是什么蘸嘶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮陪汽,結(jié)果婚禮上训唱,老公的妹妹穿的比我還像新娘。我一直安慰自己挚冤,他們只是感情好况增,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著训挡,像睡著了一般澳骤。 火紅的嫁衣襯著肌膚如雪歧强。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天为肮,我揣著相機(jī)與錄音摊册,去河邊找鬼。 笑死颊艳,一個(gè)胖子當(dāng)著我的面吹牛茅特,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播籽暇,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼饭庞!你這毒婦竟也來(lái)了戒悠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤舟山,失蹤者是張志新(化名)和其女友劉穎绸狐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體累盗,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寒矿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了若债。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片符相。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蠢琳,靈堂內(nèi)的尸體忽然破棺而出啊终,到底是詐尸還是另有隱情,我是刑警寧澤傲须,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布蓝牲,位于F島的核電站,受9級(jí)特大地震影響泰讽,放射性物質(zhì)發(fā)生泄漏例衍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一已卸、第九天 我趴在偏房一處隱蔽的房頂上張望佛玄。 院中可真熱鬧,春花似錦累澡、人聲如沸翎嫡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惑申。三九已至具伍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間圈驼,已是汗流浹背人芽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绩脆,地道東北人萤厅。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像靴迫,于是被迫代替她去往敵國(guó)和親惕味。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí)主守,c語(yǔ)言禀倔,java語(yǔ)言,單片機(jī)的匯編語(yǔ)言等参淫;大學(xué)畢...
    oceanfive閱讀 3,087評(píng)論 0 7
  • 一救湖、Java 簡(jiǎn)介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)...
    子非魚(yú)_t_閱讀 4,194評(píng)論 1 44
  • 一、字符串在C#中涎才,字符串是一系列不可修改的Unicode字符鞋既,創(chuàng)建字符串后,就不能修改它耍铜。要?jiǎng)?chuàng)建字符串涛救,最常用的...
    CarlDonitz閱讀 1,283評(píng)論 0 2
  • package cn.itcast_01;/* 字符串:就是由多個(gè)字符組成的一串?dāng)?shù)據(jù)。也可以看成是一個(gè)字符數(shù)組业扒。 ...
    蛋炒飯_By閱讀 589評(píng)論 0 0
  • 最開(kāi)心的一件事:貓叔通過(guò)我好友申請(qǐng)啦<爝骸(慶幸自己及時(shí)發(fā)現(xiàn)了貓叔說(shuō)可以加他為好友,趁他這個(gè)號(hào)還可以加人程储。)加入小灶群...
    薛薛閑扯閱讀 157評(píng)論 0 0