在字串中標記(高亮)多個關鍵字
做專案中意外碰到了這個,因為原本是一個關鍵字,後改為多個關鍵字,以空格分開。所以做了這部分,遇到這個問題,也不難,就是正則表示式加上NSMutableString的用法。
現在就來記載一下吧,記性不好,防止以後忘記,PS:其實我也不太明白具體過程,但是大概知道一些,就將我所知道的簡述一下吧,勿噴。
首先需要個方法,方法傳入searchBar的內容
在第一步,需要以空格分割字串,將各個關鍵字篩選出來,我用了NSArray來儲存各個關鍵字。
很簡單的,就是一個方法就ok了。公司不允許上傳程式碼,所以這裡簡單的手打一下方法名字。
//去掉searchBar裡的關鍵字收尾空格。(keyWord 是帶空格的多個關鍵字字串)
keyWord = [ [keyWord stringByTrimmingCharactersInset:[NSCharcterSet whitespaceCharacterSet ] ];
NSArray *keywords = [ [NSArray alloc] init];
if ( keyWord.length > 0 )
{
//獲得關鍵字,去掉searchBar裡的關鍵字空格。
keywords = [self removeSpaceInString: keyword];
}
//例項化一個MuatableAttributedString。(strText
NSMutableAttributedString *attributedString = [ [NSMutableString alloc] initWithString: strText ]
//標紅搜素出內容裡關鍵字部分
for (NSString *temp in keywords)
{
//例項化以每個關鍵字作為pattern
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern: temp options: NSRegularExpressionCaseInsensitive error: nil ];
if ( regex != nil )
{
NSArray *array = [ regex matchesInString: strText options: 0 range: NSMakeRange(0, [strText length]) ];
for ( int i = 0; i < [array count]; i++)
{
NSRange range = [ [array objectAtIndex: i] rangeAtIndex: 0];
if ( range.location != NSNotFound )
{
[attributeString beginEditing];
[attributeString addAttribute: NSForegroundColorAttributeName value: [UIColor redColor] range: range];
[attributeString endEditing];
}
}
}
}
return [attributeString autorelease];
以上就是方法了,返回的attributeString就是標記後的搜尋內容,直接賦給控制元件的.attributedText屬性輸出就可以了。
對於NSMuatableAttributedString我也沒怎麼常用,但是經常能看到對於一些字串效果用到這一類,恩,有時間還是看看吧。還有這個方法不唯一,對於分隔字串得到關鍵字NSRange的方法也不唯一,這裡是用到正則表示式來分割的。看到網上還有其他的比如NSPredicate可以用來查詢和搜尋特定字串。應該也可以做到如上。
==================================我是卡哇伊的分割線=================================
時隔多長時間來著···我又回來了,經過今天修改bug終於明白了多個關鍵字的方法原理:
贅述如下:這裡
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern: temp options: NSRegularExpressionCaseInsensitive error: nil ];
主要是用來將關鍵字作為一個正則表示式
NSArray *array = [ regex matchesInString: strText options: 0 range: NSMakeRange(0, [strText length]) ];
這裡主要是將做好的正則表示式,用於匹配字串中的關鍵字,這裡的array儲存的物件型別其實是NSSimpleRegularExpressionCheckingResult類,它是正則表示式的執行結果類,不熟悉或者不造的童鞋可以檢視蘋果官方文件。這個類有個方法
NSRange range = [ [array objectAtIndex: i] rangeAtIndex: 0];就是這裡的rangeAtIndex這個方法,一般取值0的時候是返回結果型別代表範圍。所以這裡的range其實就是找到的關鍵字位置範圍,通過for迴圈,逐一獲得位置,用 [attributeString addAttribute: NSForegroundColorAttributeName
value: [UIColor redColor] range: range];將該範圍的字串(也就是關鍵字)標紅或者高亮。
這就是整個關鍵字標紅的過程。
另外注意:正則表示式由於有自己的語法和關鍵字,所以對於一些特殊字元需要做轉義處理,否則系統將認為這樣的關鍵字不能作為一個正則表示式。附特殊字元:
"$", "(", ")", "*", "+", ".", "[", "]", "?", "\\", "^", "{", "}", "|",""
相關推薦
在字串中標記(高亮)多個關鍵字
做專案中意外碰到了這個,因為原本是一個關鍵字,後改為多個關鍵字,以空格分開。所以做了這部分,遇到這個問題,也不難,就是正則表示式加上NSMutableString的用法。 現在就來記載一下吧,記性不好,防止以後忘記,PS:其實我也不太明白具體過程,但是大
使Atom支援微信小程式程式碼格式wxml,wxss有顏色(高亮)
在用Atom來瀏覽或者編輯微信小程式時的介面時全灰色文字怎麼辦?!! 如何讓wxml和wxs格式的程式碼像HTML,CSS變成高亮的呢。。 就像這樣 ↓↓↓↓↓↓↓ 修改步驟如下 1.在Atom中裝
Vue 選單欄點選切換單個class(高亮),超簡單!
步驟: 遍歷物件(goods)獲取選單欄每一項的物件(item)和下標(index) 新增點選事件toggle(),傳入下標引數:@click="fn1();fn2()" 動態切換classname::class="{'active':index ==che
android多語言專案中字串的移植(bash工具)
有時候我們會遇到這樣一種情況:一些字串資源要從原始專案A移植到現在我們開發的專案B中比如移植app名字<string name="app_label">Calendar</string>我們需要做的是:在新專案對應的語言資源中查詢是否有app_labe
java比較兩個字串完全不同處高亮顯示(過濾了某些字串前面不不相干字元)
java比較兩個字串完全不同處高亮顯示(過濾了某些字串前面不相干字元) 歡迎各位使用並優化,因為我也不太清楚這裡面是不是有嚴重的問題,後期我會再度優化的,寫這個東西主要是因為在網上很難找到類似的東西= =。 再說一句,請各位大佬帶我飛好嘛!!畢竟我是個小碼農
程式設計珠璣(四)求一個字串中連續出現的次數最多的子串
這個題目不是程式設計珠璣上看到的,但是解法用到的資料結構在程式設計珠璣上有講到,先歸類到這裡。 求一個字串中連續出現的次數最多的子串。例如字串“abababc”,最多連續出現的為ab,連續出現三次。要和求一個字串中的最長重複子串區分開來,還是上面的字串,那麼最長的重複子串為
c語言 陣列中字串的旋轉(左旋)(右旋)
在陣列中定義一個字串,該字串由“ abcdef ” 組成,所謂左旋即是讓左邊的第一個字元旋轉到右邊去,左旋一個字元即是產生“ bcdefa ”這樣的字串,右旋與之相反。 為了控制左(右)旋的字元數,需要製作一個可以改
常用正則表示式(高亮,markdown)
校驗數字的表示式 1 數字:^[0-9]*$ 2 n位的數字:^\d{n}$ 3 至少n位的數字:^\d{n,}$ 4 m-n位的數字:^\d{m,n}$ 5 零和非零開頭的數字:^(0|[1-9][0-9]*)$ 6 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(
迴文判斷程式碼(可以忽略字串中的空格,標點符號),舉個例子啊,abcddcba就是一個迴文。a b cd,dc ba也是一個迴文。
#include<stdio.h> #include<string.h> #define N 100 int main() { char a[N]; char b[N]; int len; int j = 0;
Android 魔術字型按鈕(高亮,陰影效果)
效果如下,封裝記錄原始碼: double_arrow.png 圖示資源 介面: <LinearLayout
Sping 中 singleton(單例)和 prototype(多例) 的理解
Singleton: 當一個 bean 的作用域為 singleton(單例)時,IOC 容器中只會存在一個共享的 bean 例項,且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一例項。也就是說,這個單一例項被儲存到單例快取中,以
Qt 之 QSS(語法高亮)
簡述 語法高亮是文字編輯器用來顯示文字的,特別是原始碼,根據不同的類別來用不同的顏色和字型顯示。這個功能有助於編寫結構化的語言,例如:程式語言、標記語言,這些語言的語法錯誤顯示是有區別的。 | 詳細描述 語法高亮
二、k8s1.12 master多節點(高可用)
架構圖 master 節點我們要避免單節點,防止故障 1、多節點部署 我們在192.168.1.9上面部署另外一臺master 首先我們將主節點檔案拷貝過去: cd /opt scp -r kubernetes 192.168.1.9:/opt/ scp -r
python中字串的翻轉(方法總結)
Python翻轉字串(reverse string), 一共包含5種方法, 其中第一種最簡單, 即步長為-1, 輸出字串; 方法如下 5種方法的比較: 1. 簡單的步長為-1, 即字串的翻轉(常用)
LeetCode | Reverse Words in a String(字串中的單詞序反轉)
Given an input string, reverse the string word by word. For example, Given s = "the sky is blue", return "blue is sky the". Clarific
mac下vim的16種配色方案(程式碼高亮)展示,及配置
下面給大家展示一下mac下所有vim的配色方案的樣式。 darkblue delek elflord koehler murphy peachpuff sh
7-8 單詞長度(15 分)(將字串中的單詞提取出來)
#include <bits/stdc++.h> using namespace std; int main() { string str, buf;//字串型別,長度不定 int n; getline(cin, str);//讀入字串
一步一步教你寫股票走勢圖——分時圖四(高亮聯動)
前一節我們學習了有關柱狀圖的高亮自定義,那麼這一節我們來搞一搞兩張圖表的聯動效果,先看一下我們要實現的效果。 我們要實現兩張圖表之間建立了連線,我們滾動高亮第一張圖,第二張圖表的高亮也會跟著動,滾動第二張圖表第一張要跟著動。 分析原始
在ASP.NET MVC 模型中 選擇最好的方法將多個model(資料模型)傳遞到檢視
無論你什麼時候需要保持一些資訊直到一個接著的後來的請求,使用TempData都是很好的方法。它應該在你需要保持例如驗證資訊,錯誤資訊,或者一些小的不包含敏感資料資訊的時候使用。因為它能保證會話來傳遞變數,所以你不應該把敏感的資訊存放在TempData。 (adsbygoogle =
C和C++中字串符(String)和字串字面量(String Literal)的區別
轉自:http://www.360doc.com/content/12/0511/19/7775902_210379219.shtml C/C++中的物件指的是一塊儲存區。字串字面量是不需要建立過程就可以使用的物件,所以它既沒有變數那樣的宣告或者定義(字串字面量是無名物件