C# 多关键字分别高亮显示的问题

xiaoym1116 2009-06-22 11:52:36
简单点说,就是想把以下代码
public static string HighlightKeyword(string str, string keyword)
中的
string keyword 换成 String[] keyword 后能够实现




罗嗦点说,

现在实现的是单个关键字高亮,比如 流行 歌曲 ,现在是两个一起高亮显示,连在一起

想实现让每个关键字分开单独显示,用了String[] keyword 替换了原来的 string keyword

拆分后搜索已经正常,但想高亮显示字符串数组里的每个关键字就不知道如何实现了


如何把 下边的字符串keyword 换成 String[] keyword,判断String[] keyword的长度并每组里的关键字单独高亮显示?

越简单实现越好,太复杂估计我很难看懂,谢谢各位帮忙!



aspx

<asp:Repeater ID="searchList" runat="server">
<ItemTemplate>
<%# HighlightKeyword(DataBinder.Eval(Container.DataItem, "title").ToString(), keyword)%>

aspx.cs

/// <summary>
/// 把关键字替换为高亮显示
/// </summary>
/// <returns></returns>
public static string HighlightKeyword(string str, string keyword)
{
int index;
int startIndex = 0;
string highlightBegin = "<em>";
string highlightEnd = "</em>";
int length = highlightBegin.Length + keyword.Length;
int lengthHighlight = length + highlightEnd.Length;

while ((index = str.IndexOf(keyword, startIndex, StringComparison.OrdinalIgnoreCase)) > -1)
{
str = str.Insert(index, highlightBegin).Insert(index + length, highlightEnd);
startIndex = index + lengthHighlight;
}

return str;
}


...全文
399 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoulinli915 2012-04-09
  • 打赏
  • 举报
回复
支持数组,单个字符
zhoulinli915 2012-04-09
  • 打赏
  • 举报
回复
/// <summary>
/// 把关键字替换为高亮显示
/// </summary>
/// <returns></returns>
public static string HighlightKeyword(string str, string keyword)
{
int index;
int startIndex = 0;
string highlightBegin = "<font color='#f00;'>";
string highlightEnd = "</font>";
int length = highlightBegin.Length + keyword.Length;
int lengthHighlight = length + highlightEnd.Length;

while ((index = str.IndexOf(keyword, startIndex, StringComparison.OrdinalIgnoreCase)) > -1)
{
str = str.Insert(index, highlightBegin).Insert(index + length, highlightEnd);
startIndex = index + lengthHighlight;
}

return str;
}
/// <summary>
/// 把关键字替换为高亮显示
/// </summary>
/// <returns></returns>
public static string HighlightKeyword(string str, string[] keyword)
{
string rtnval = string.Empty;
if (keyword.Length > 0)
{
foreach (string Item in keyword)
{
rtnval += HighlightKeyword(str, Item);
}
}
else {
rtnval = str;
}
return rtnval;
}
zouzedong 2009-08-11
  • 打赏
  • 举报
回复
我也等着解决这问题。。
zmm12 2009-06-22
  • 打赏
  • 举报
回复
恭喜楼主,JF
gdjlc 2009-06-22
  • 打赏
  • 举报
回复
自己解决总比别人帮忙好吧,至少印象深刻~
xiaoym1116 2009-06-22
  • 打赏
  • 举报
回复
郁闷了,怎么都解决不了
N次都是刚发完求助帖,就意外的搞定了

不过问题解决总是好是,散分
xiaoym1116 2009-06-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liuxibei1987 的回复:]
解决了?

我昨天才解决了这个问题.
多关键字搜索,url传值,获取url参数后,去掉前后空格后,按空格分割成一个keywords[]数组
然后用for循环一下得到sql语句 字段 like '%"+keywords[0]+"%' or 字段 like '%"+keywords[1]+"%' .....
然后取出数据,再用replace替换一下,也是用for循环 raplace(keywords[i] , " <font color=red"+keywords[i]+" </font>")
将所有的关键字都替换后在将数据绑定到页面中
[/Quote]

恩,解决了,一样的拆分字符串然后循环生成SQL语句,

在绑定的时候再替换关键子,关键字两头加<em></em>标签,样式用CSS定义,以后修改方便

public static string HighlightKeyword(string str, String[] keywordValues)
{
int index;
int startIndex = 0;
string highlightBegin = "<em>";
string highlightEnd = "</em>";

for (int i = 0; i < keywordValues.Length; i++)
{
int length = highlightBegin.Length + keywordValues[i].Length;
int lengthHighlight = length + highlightEnd.Length;


while ((index = str.IndexOf(keywordValues[i], startIndex, StringComparison.OrdinalIgnoreCase)) > -1)
{
str = str.Insert(index, highlightBegin).Insert(index + length, highlightEnd);
startIndex = index + lengthHighlight;
}
}
return str;
}

z3501173 2009-06-22
  • 打赏
  • 举报
回复
学习
peng_weida 2009-06-22
  • 打赏
  • 举报
回复
呵呵 恭喜
liuxibei1987 2009-06-22
  • 打赏
  • 举报
回复
解决了?

我昨天才解决了这个问题.
多关键字搜索,url传值,获取url参数后,去掉前后空格后,按空格分割成一个keywords[]数组
然后用for循环一下得到sql语句 字段 like '%"+keywords[0]+"%' or 字段 like '%"+keywords[1]+"%' .....
然后取出数据,再用replace替换一下,也是用for循环 raplace(keywords[i] , "<font color=red"+keywords[i]+"</font>")
将所有的关键字都替换后在将数据绑定到页面中
windinwing 2009-06-22
  • 打赏
  • 举报
回复
刷分外挂来了

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧