Я пытаюсь найти эквивалент C # string.IndexOf(string)
, который может обрабатывать суррогатные пары в символах Юникода.
Я могу получить индекс при сравнении только отдельных символов, как в коде ниже:
public static int UnicodeIndexOf(this string input, string find)
{
return input.ToTextElements().ToList().IndexOf(find);
}
public static IEnumerable<string> ToTextElements(this string input)
{
var e = StringInfo.GetTextElementEnumerator(input);
while (e.MoveNext())
{
yield return e.GetTextElement();
}
}
Но если я попытаюсь использовать строку в качестве переменной find
, она не будет работать, потому что каждый текстовый элемент содержит только один символ для сравнения.
Есть какие-нибудь предложения относительно того, как написать это?
Спасибо за любую помощь.
EDIT:
Ниже приведен пример того, почему это необходимо:
код
Console.WriteLine("HolyCow?BUBBYY?YY?Y".IndexOf("BUBB"));
Console.WriteLine("HolyCow@BUBBYY@YY@Y".IndexOf("BUBB"));
OUTPUT
9
8
Обратите внимание, где я заменяю символ ?
на @
, значения меняются.