请教!!C#敏感字替换特定字符串
现在过虑敏感字算法很多,五花八门的,但很多的不是把敏感字替换成‘*’就是直接消灭了了事,但我现在想要的是替换成特定的字符串。
a.txt 中设定的关键字替换:
尼玛的|{ 编者按:[你太坏了]}
我就太阳了|{编者按:[不要这样子]}
F.U.C.K|{[别骂人,这样真的不好。]}
去si吧|{[你确定要这样吗?]}
你了不起|{[好吧,败给你了。一会带你看星星!]}
现在我想把‘|’前面定义为[敏感字],然后替换成花括号‘{}’中的字符串。
有没有类似于二维数组这样的存储效果:
string[][] array = new string[][];
array[0][0] = "尼玛的";
array[0][1] = "编者按:[你太坏了]";
array[1][0] = "我就太阳了";
array[1][1] ="编者按:[不要这样子]";
一碰到array[i][0]的敏感字,就替换为array[i][1]中的字符串。
http://www.cnblogs.com/yeerh/archive/2011/10/20/2219035.html 优化的算法
/// <summary>
/// 优化的算法
/// </summary>
public class BadWordsFilter2
{
private HashSet<string> hash = new HashSet<string>();
private ushort[] fastCheck = new ushort[char.MaxValue + 1];
private ushort[] startLength = new ushort[char.MaxValue + 1];
private ushort[] endLength = new ushort[char.MaxValue + 1];
private int maxWordLength = 0;
private int minWordLength = int.MaxValue;
public void AddKey(string word)
{
if (word.Length > 16)
{
throw new Exception("参数最大16个字符");
}
maxWordLength = Math.Max(maxWordLength, word.Length);
minWordLength = Math.Min(minWordLength, word.Length);
//字符出现的位置(1-16),
for (int i = 0; i < word.Length; i++)
{
fastCheck[word[i]] |= (byte)(1 << i);
}
ushort mask = (ushort)(1 << word.Length - 1);
//以x开始的字符的长度
startLength[word[0]] |= mask;
//以x结束的字符的长度
endLength[word[word.Length - 1]] |= mask;
hash.Add(word);
}
public bool HasBadWord(string text)
{
for (int index = 0; index < text.Length; index++)
{
int count = 0;
int maxIndex = Math.Min(maxWordLength + index, text.Length);
char begin = text[index];
for (int j = index; j < maxIndex; j++)
{
char current = text[j];
ushort mask = (ushort)(1 << count);
if ((fastCheck[current] & mask) == 0)
{
index += count;
break;
}
++count;
if ((startLength[begin] & mask) > 0 && (endLength[current] & mask) > 0)
{
string sub = text.Substring(index, count);
if (hash.Contains(sub))
{
//index += (count - 1);
return true;
}
}
}
}
return false;
}
public string FindOne(string text)
{
for (int index = 0; index < text.Length; index++)
{
int count = 0;
int maxIndex = Math.Min(maxWordLength + index, text.Length);
char begin = text[index];
for (int j = index; j < maxIndex; j++)
{
char current = text[j];
ushort mask = (ushort)(1 << count);
if ((fastCheck[current] & mask) == 0)
{
index += count;
break;
}
++count;
if ((startLength[begin] & mask) > 0 && (endLength[current] & mask) > 0)
{
string sub = text.Substring(index, count);
if (hash.Contains(sub))
{
index += (count - 1);
return sub;
}
}
}
}
return string.Empty;
}
public IEnumerable<string> FindAll(string text)
{
for (int index = 0; index < text.Length; index++)
{
int count = 0;
int maxIndex = Math.Min(maxWordLength + index, text.Length);
char begin = text[index];
for (int j = index; j < maxIndex; j++)
{
char current = text[j];
ushort mask = (ushort)(1 << count);
if ((fastCheck[current] & mask) == 0)
{
index += count;
break;
}
++count;
if ((startLength[begin] & mask) > 0 && (endLength[current] & mask) > 0)
{
string sub = text.Substring(index, count);
if (hash.Contains(sub))
{
index += (count - 1);
yield return sub;
break;
}
}
}
}
}
}
...全文
相关推荐
C#自定义字符串替换Replace方法实例
正则表达式提供了强大的模式匹配和替换功能,能够应对各种复杂的字符串操作需求。总的来说,自定义的`Replace`方法为我们在C#中处理特定字符串替换需求提供了灵活性。
C#实现文本敏感字符过滤与替换
在今天的数字化社会中,信息安全已成为企业和个人都无法忽视的课题。敏感字符过滤与替换作为信息安全的基础技术之一,在维护网络环境的清洁、保护用户隐私及防止敏感信息泄露等方面扮演着重要角色。本章节将介绍敏感字符过滤与替换的基本概念、应用场景及重要性,为后续章节深入探讨C#文本处理技术及实现细节奠定基础。敏感字符过滤与替换通常涉及对特定文本内容进行检查并替换掉其中的敏感词汇。为了实现这一功能,我们往往需要建立一个包含所有敏感词汇的“黑名单”,当用户输入或文本文件中出现这些词汇时,系统将自动进行处理。
C#字符串查找与替换技术详解及实战
在配置文件解析中,经常遇到键重复的情况,要求取最后一次赋值:log=info;= -1)?// false逻辑分析:先找最后一个"debug=";计算值起始位置;再找后续第一个分号确定结束位置;若无分号则取到字符串末尾。此逻辑实现了类似 INI 文件的“后声明覆盖先声明”语义。
C#敏感词过滤实现方法
在C#编程中,敏感词过滤是一个常见的需求,特别是在处理用户输入、评论或者社交媒体内容时,需要防止不适当或违规的词汇出现。本篇将详细讲解如何使用C#实现敏感词过滤,涉及到字符串操作和数据结构的应用。
C#(.NET)Access字段内容替换字符串工具
在数据库管理中,这是一项常见的需求,例如,用户可能需要更新大量记录中的某个特定字符串,如修改错误的数据、统一格式或者更新敏感信息。


