2015-10-01 34 views
6

Tôi đang cố gắng tìm ra cách kiểm tra xem chuỗi có chứa biểu tượng cảm xúc thông thường hay không. Ví dụ, hãy nhìn vào hai biểu tượng cảm xúc sau:Cách so sánh và chuyển đổi các ký tự biểu tượng cảm xúc trong C#

Người đi xe đạp: http://unicode.org/emoji/charts/full-emoji-list.html#1f6b4

Mỹ Cờ: http://unicode.org/emoji/charts/full-emoji-list.html#1f1fa_1f1f8

Người đi xe đạp là U+1F6B4, và lá cờ Mỹ là U+1F1FA U+1F1F8.

Tuy nhiên, các biểu tượng cảm xúc để kiểm tra được cung cấp cho tôi trong một mảng như thế này, chỉ với các giá trị số trong chuỗi:

var checkFor = new string[] {"1F6B4","1F1FA-1F1F8"}; 

Làm thế nào tôi có thể chuyển đổi những giá trị mảng vào các ký tự unicode thực tế và kiểm tra xem liệu một chuỗi có chứa chúng không?

Tôi có thể nhận được một cái gì đó làm việc cho xe đạp, nhưng đối với lá cờ Mỹ, tôi đang bối rối.

Đối với Người đi xe đạp, tôi đang làm như sau:

const string comparisonStr = "..."; //some string containing text and emoji 

var hexVal = Convert.ToInt32(checkFor[0], 16); 
var strVal = Char.ConvertFromUtf32(hexVal); 

//now I can successfully do the following check 

var exists = comparisonStr.Contains(strVal); 

Nhưng điều này sẽ không làm việc với Cờ Mỹ vì các điểm mã nhiều.

Trả lời

9

Bạn đã vượt qua phần khó khăn. Tất cả những gì bạn đã bỏ lỡ là phân tích cú pháp giá trị trong mảng và kết hợp 2 ký tự unicode trước khi thực hiện kiểm tra.

Dưới đây là một chương trình mẫu mà nên làm việc:

static void Main(string[] args) 
{ 
    const string comparisonStr = "bicyclist: \U0001F6B4, and US flag: \U0001F1FA\U0001F1F8"; //some string containing text and emoji 
    var checkFor = new string[] { "1F6B4", "1F1FA-1F1F8" }; 

    foreach (var searchStringInHex in checkFor) 
    { 
     string searchString = string.Join(string.Empty, searchStringInHex.Split('-') 
                 .Select(hex => char.ConvertFromUtf32(Convert.ToInt32(hex, 16)))); 

     if (comparisonStr.Contains(searchString)) 
     { 
      Console.WriteLine($"Found {searchStringInHex}!"); 
     } 
    } 
} 
+0

Perfect, cảm ơn. Các nhân vật kết hợp đã vấp ngã tôi vì một lý do nào đó. – tbraun

Các vấn đề liên quan