我想为 .NET String 类编写一个扩展方法。我希望它是 Split 方法的一个特殊变体 - 当在分隔符之前使用转义字符时,它采用转义字符以防止拆分字符串。
最好的写法是什么?我很好奇处理它的最佳非正则表达式方法。
带有签名的东西,例如...
public static string[] Split(this string input, string separator, char escapeCharacter)
{
// ...
}
更新: 因为它出现在一个评论中,转义......
在 C# 中转义非特殊字符时会出现错误 - CS1009:无法识别的转义序列。
在 IE JScript 中,转义字符被丢弃。除非你尝试\u 然后你得到一个“预期的十六进制数字”错误。我测试了 Firefox,它具有相同的行为。
我希望此方法非常宽容并遵循 JavaScript 模型。如果您在非分隔符上转义,它应该“友好地”删除转义字符。
最佳答案
怎么样:
public static IEnumerable<string> 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);
}
这似乎可行(使用一些快速测试字符串),但它不会删除转义字符 - 我怀疑这将取决于您的具体情况。
关于C# 扩展方法 - 也接受转义字符的字符串拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/634777/