删除时出现奇怪的可重现行为 - 未正确删除字符

时间:2018-05-01 13:36:56

标签: c# string

我使用字符串的Remove方法遇到了非常奇怪的行为。

    public static Boolean StartsWithCommand(String lineIn, out String lineOut, String command)
    {
        String correctedLine = lineIn.Trim();
        String correctedCommand = command.Trim();
        if (correctedLine.ToLower().StartsWith(correctedCommand.ToLower()) == true)
        {
            lineOut = correctedLine.Remove(0, correctedCommand.Length);
            return true;
        }
        lineOut = lineIn;
        return false;
    }

很简单,我检查修剪后的字符串(命令)是否在第二个修剪字符串(lineIn)的开头。如果是这样,我将lineIn输出到lineOut,删除命令,否则只输出lineIn。但考虑一下测试:

        String testString = "0123456789";
        StartsWithCommand(testString, out testString, "0123");
        //testString should be 456789, yet I get 23456789

我已经在MSDN上搜索了有关删除功能的任何内容,但没有任何迹象表明存在任何问题。通过调试器运行我可以确认correctCommand.Length的长度是正确的(4),但只删除了两个字符。这可能是什么原因?

1 个答案:

答案 0 :(得分:0)

问题解决了!

代码中没有问题,问题更加微妙。由于未知的原因和我以前从未见过的情况,传入的字符串(testString)在其开头有一个字节顺序标记。这从未在任何文本编辑器中显示,只有在显示teststring的每个字符的整数值后才能实现。复制和粘贴此特定字符串将始终复制并粘贴BOM - 因此始终会继续执行错误。

希望这有助于其他可能遇到类似问题的人。