今日,碰到一個問題:如何在網頁中高亮顯示不區分大小寫的關鍵字
例如:文本abcaBcabCaBCabcaBCa,關鍵字bc,在不區分大小寫的情況,一共有6個匹配項。
則在網頁中顯示的是abcaBcabCaBCabcaBCa。
很多人,想到是replace函數。但是在c# 中replace函數無法解決字母大小寫問題。
例如示例上看,bc,Bc,bC,BC都被搜索到了,卻不能統一替換為一個文本
以上文字轉自大牛“萬倉一黍“的文章--”高亮顯示不區分大小寫的關鍵字——ASP“。
但是他的文章寫得是ASP版本,今天我寫得是C#版本;下面說說解決辦法。
解決辦法:運用 IndexOf
IndexOf(String, Int32, StringComparison)
指定的字符串在當前 String 對象中的第一個匹配項的索引。
參數
- value
-
類型:
System. String
要搜尋的字符串。
- startIndex
-
類型:
System. Int32
搜索起始位置。
- comparisonType
-
類型:
System. StringComparison
指定搜索規則的枚舉值之一。 - (OrdinalIgnoreCase:使用序號排序規則並忽略被比較字符串的大小寫,對字符串進行比較。)
- 代碼
-
1 /// <summary> 2 /// 高亮查找關鍵字。 3 /// </summary> 4 /// <param name="str">文本。</param> 5 /// <param name="keyword">關鍵字</param> 6 /// <returns>含高亮標識的文本。</returns> 7 /// <remarks> 8 /// 1、字母不區分大小寫。 9 /// 2、CssClass 名稱為 highlight。 10 /// </remarks> 11 private string HighLightKeyword(string str, string keyword) 12 { 13 int index; 14 var startIndex = 0; 15 const string highLightBegin = "<span class='highlight'>"; 16 const string highLightEnd = "</span>"; 17 var length = highLightBegin.Length + keyword.Length; 18 var lengthHighlight = length + highLightEnd.Length; 19 20 while ((index = str.IndexOf(keyword, startIndex, StringComparison.OrdinalIgnoreCase)) > -1) 21 { 22 str = str.Insert(index, highLightBegin).Insert(index + length, highLightEnd); 23 startIndex = index + lengthHighlight; 24 } 25 26 return str; 27 }
歡迎大家來吐糟!!!