Jeśli mam ciąg znaków taki jak "123"
, jak mogę podzielić go na tablicę, która będzie wyglądać jak ["", "1", "2", "3", ""]
? Jeśli używam ToCharArray()
, pierwszy emotikon jest podzielony na 2 znaki, a drugi na 7 znaków.Jak podzielić ciąg znaków Unicode na wiele znaków Unicode w języku C#?
Aktualizacja
Rozwiązanie teraz wygląda tak:
public static List<string> GetCharacters(string text)
{
char[] ca = text.ToCharArray();
List<string> characters = new List<string>();
for (int i = 0; i < ca.Length; i++)
{
char c = ca[i];
if (c > 65000) continue;
if (char.IsHighSurrogate(c))
{
i++;
characters.Add(new string(new[] { c, ca[i] }));
}
else
characters.Add(new string(new[] { c }));
}
return characters;
}
Należy pamiętać, że, jak wspomniano w komentarzach, to nie działa dla emotikonom rodziny. Działa tylko w przypadku emotikonów, które mają 2 znaki lub mniej. Dane wyjściowe tego przykładu będą następujące: ["", "1", "2", "3", "", "", "", ""]
'+ + + =' zabawny, nie wiedziałem, że – fubo
Jak to się stało? Emoji jest dla silnika renderującego tekst. Przetwarzanie tekstu zawierającego emoji jest mniej więcej równoznaczne z radością przetwarzania chińskiego tekstu. Lub Zalgo, jeśli chcesz prawdziwego wyzwania :) Rozpoznanie surogatów nie jest inaczej nauką o rakietach, użyj Char.IsLowSurrogate(). –