当前位置:  开发笔记 > 编程语言 > 正文

C#扩展方法 - 也接受转义字符的字符串拆分

如何解决《C#扩展方法-也接受转义字符的字符串拆分》经验,为你挑选了2个好方法。

我想为.NET String类编写扩展方法.我希望它是Split方法的一个特殊的方法 - 在分隔符之前使用转义字符时,它采用转义字符来防止拆分字符串.

写这个的最好方法是什么?我很好奇最好的非正则表达式来接近它.
像签名一样的东西......

public static string[] Split(this string input, string separator, char escapeCharacter)
{
   // ...
}

更新: 因为它出现了一个评论,逃避......

在C#中转义非特殊字符时会出现错误 - CS1009:无法识别的转义序列.

在IE JScript中,转义转义字符.除非你尝试\ u然后你得到一个"预期的十六进制数字"错误.我测试了Firefox,它有相同的行为.

我希望这种方法非常宽容并遵循JavaScript模型.如果你在非分隔符上转义,它应该"善意"删除转义字符.



1> Jon Skeet..:

怎么样:

public static IEnumerable Split(this string input, 
                                        string separator,
                                        char escapeCharacter)
{
    int startOfSegment = 0;
    int index = 0;
    while (index < input.Length)
    {
        index = input.IndexOf(separator, index);
        if (index > 0 && input[index-1] == escapeCharacter)
        {
            index += separator.Length;
            continue;
        }
        if (index == -1)
        {
            break;
        }
        yield return input.Substring(startOfSegment, index-startOfSegment);
        index += separator.Length;
        startOfSegment = index;
    }
    yield return input.Substring(startOfSegment);
}

这似乎有用(有一些快速测试字符串),但它不会删除转义字符 - 这将取决于你的确切情况,我怀疑.



2> James Curran..:

这将需要清理一下,但这基本上是....

List output = new List();
for(int i=0; i

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有