var message = "今天天气正好[哈哈],可惜明天要下雨。[鄙视]";
//方案一:效率低(多次遍历),但是简单易懂
string[] emotions = { "[哈哈]", "[调皮]" };
string cleanMessage = message;
foreach (var emotion in emotions)
{
cleanMessage = cleanMessage.Replace(emotion, string.Empty);
}
//方案二:只遍历一次message
string[] emotions = { "哈哈", "调皮" }; //注意跟上面不同
var cleanMessage = new StringBuilder();
int position = 0;
while (position < message.Length)
{
if (message[position] == '[')
{
var part = message.Skip(position + 1).TakeWhile(c => c != ']').ToArray();
if (emotions.Any(e => e.SequenceEqual(part)))
{
position += part.Length + 2;
continue;
}
}
cleanMessage.Append(message[position]);
position++;
}
第二种好。
另外楼主会不会有这样的要求:不是所有[]中间的文字都是表情吧,应该还会要有一个字典。
@吕飞: 当然不是所有[]中间都是表情了,这个我已经考虑到了啊,你看那个[鄙视]就不会被过滤掉,因为我的表情字典里没有[鄙视],只有[哈哈]和[调皮]。
可以用正则表达式的撒
用正则也行,\[(哈哈|调皮)\]
首先建立一个表情的字典、然后用正则表达式,去过滤