Я пытаюсь найти эквивалент С# string.IndexOf(string)
, который может обрабатывать суррогатные пары в символах Unicode.
Я могу получить индекс только при сравнении отдельных символов, как в приведенном ниже коде:
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
, это не сработает, потому что каждый текстовый элемент содержит только один символ для сравнения.
Есть ли какие-либо предложения относительно того, как это написать?
Спасибо за любую помощь.
РЕДАКТИРОВАТЬ:
Ниже приведен пример того, почему это необходимо:
КОД
Console.WriteLine("HolyCow????BUBBYY????YY????Y".IndexOf("BUBB"));
Console.WriteLine("HolyCow@BUBBYY@YY@Y".IndexOf("BUBB"));
ВЫХОД
9
8
Обратите внимание, когда я заменяю символ ????
на @
, значения меняются.
IndexOf
в массиве строк, которые фактически являютсяTextElements
, но из вашего примера данных это выглядит как будто вы действительно хотите найти индекс подстроки длиной › 1 графема. Можете ли вы указать, какое решение вы ищете? (Просто запустите свой код на своих тестовых данных - он не будет работать - indexOf вернет -1) - person ironstone13   schedule 04.05.2018