为了账号安全,请及时绑定邮箱和手机立即绑定

什么是可以处理代理对的Unicode安全的String.IndexOf(字符串输入)副本?

什么是可以处理代理对的Unicode安全的String.IndexOf(字符串输入)副本?

C#
一只甜甜圈 2021-05-11 17:20:46
我试图找出一个等效的C#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"));输出98请注意,我在哪里?用@值更改替换了字符。
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

您基本上想在另一个字符串数组中找到一个字符串数组的索引。我们可以根据以下问题改编代码:


public static class Extensions {

    public static int UnicodeIndexOf(this string input, string find, StringComparison comparison = StringComparison.CurrentCulture) {

        return IndexOf(

           // split input by code points

           input.ToTextElements().ToArray(),

           // split searched value by code points

           find.ToTextElements().ToArray(), 

           comparison);

    }

    // code from another answer

    private static int IndexOf(string[] haystack, string[] needle, StringComparison comparision) {

        var len = needle.Length;

        var limit = haystack.Length - len;

        for (var i = 0; i <= limit; i++) {

            var k = 0;

            for (; k < len; k++) {

                if (!String.Equals(needle[k], haystack[i + k], comparision)) break;

            }


            if (k == len) return i;

        }


        return -1;

    }


    public static IEnumerable<string> ToTextElements(this string input) {

        var e = StringInfo.GetTextElementEnumerator(input);

        while (e.MoveNext()) {

            yield return e.GetTextElement();

        }

    }

}


查看完整回答
反对 回复 2021-05-29
  • 1 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信