2014-04-29 26 views
0

我有一个这样的数据库表情列表检查字符并将图释转换为文本? C#

id | emoticon | convert_text 

1 | :)  | e_happy 

2 | :( | e_sad 

如何检查是否有任何字符列入表情符号列表?

如果找到,则将表情符号改为文字。

例子:

before 
S = Smile at everyone who doesn't smile at your :) 

after 
S= Smile at everyone who doesn't smile at your e_happy 

*编辑

首先我试过每一个字拆这样

static void Main(string[] args) 
    { 
     string value = "Smile at everyone who doesn't smile at your :)"; 
     char[] delimiter = new char[] { ' ', ',', '.' }; 

     string[] array = value.Split(delimiter, StringSplitOptions.RemoveEmptyEntries); 
     foreach (string entry in array) 
     { 
      Console.WriteLine(entry); 
     } 
     Console.ReadKey(); 
    } 

我很困惑如何检查每个字进行的表情列表在数据库中,并将图释转换为文本,如示例 *对不起,这是我的第一篇文章,我正在翻译谷歌翻译

+0

我已经更新我的问题 – Hibishi

+0

因此,第一部分是从数据库中获取表情图到相应的convert_text标记。这取决于你正在使用的数据库。你已经完成了这部分? –

+1

您可以将'emoticon'和'convert_text'存储到'Dictionary '中,其中键是'表情符号'是关键字,'convert_text'是值。然后使用字典查找并替换单词。 一旦你遇到问题,你会分裂字符可能会丢失,你可能需要找出一个办法 – Ramesh

回答

0

如何使用正则表达式?

var emoticons = new Dictionary<string, string> 
{ 
    { ":)" , "smile" }, 
    { ";)" , "blink" }, 
    { ">:)", "devil" }, 
    { "@}-", "rose" } 
}; 
string value = "Smile at everyone who doesn't smile at your :)"; 
Console.WriteLine(Regex.Replace(value, 
    String.Join("|",emoticons.Select(e => Regex.Escape(e.Key)).ToArray()), 
    (match) => 
    { 
     string result = null; 
     return emoticons.TryGetValue(match.Value, out result) 
      ? result : match.Value; 
    })); 

通过使用正则表达式,你可以一个:):]使用相同的表情,如果你已经把他们在数据库中正确转义匹配。在此示例中,我认为所有的表达式是“不安全”,所以我用的是Regex.Escape呼叫

1

由于数量和表情符号可以是非常大和非常随机的(like :) ;) >:) @}-, etc; and then new can be added anytime)我认为,正则表达式不能用于他们全部。所以我想以更详细的方式来解决这个问题。

  1. 负载在包含表情符号的关键和convert_text作为值字典中的所有表情符号(只要确保关键是不能重复的,否则会出现异常)
  2. 做一个foreach每个表情关键和替换它在文本

声明的字典

Dictionary<string, string> emoticons = new Dictionary<string, string>(); 

个加载表情到字典(使用的DataReader)

// declare/open the connection (depends on the current application design 

string sql = "SELECT * FROM Emoticons 
// cmd.ExecuteReader above query to get dataReader (dr) 

while(dr.Read()) 
{ 
    string key = dr.GetString(dr.GetOrdinal("Emoticons")); 

    if(!emoticons.ContainsKey(key)) 
     emoticons.Add(key, dr.GetString(dr.GetOrdinal("convert_test")); 
} 
dr.Close(); 

以上词典可以存储为一个类级别的对象或作为项目层面的全局对象,这样你就不需要每次读取数据库。

与convert_text

foreach(string key in emoticons.Keys) 
    value = value.Replace(key, emoticons[key]); 

// here you will have all emoticons converted with their convert_text. 

很乐意帮忙更换所有的表情符号!如果您发现它有帮助,请记住接受答案。