我使用字符串的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),但只删除了两个字符。这可能是什么原因?
答案 0 :(得分:0)
问题解决了!
代码中没有问题,问题更加微妙。由于未知的原因和我以前从未见过的情况,传入的字符串(testString
)在其开头有一个字节顺序标记。这从未在任何文本编辑器中显示,只有在显示teststring
的每个字符的整数值后才能实现。复制和粘贴此特定字符串将始终复制并粘贴BOM - 因此始终会继续执行错误。
希望这有助于其他可能遇到类似问题的人。