.net和IndexOf中的特殊符号

时间:2013-07-10 14:21:41

标签: c# string parsing

我发现了一个有趣的错误,甚至可能在.net中(还没有尝试过单声道)。

字符串实例的

IndexOf()方法为某些特殊符号返回有符号值(-1或更低),

例如,我有一个字符串,其中包含一些特殊的unicode字符,并且此字符串内部的某处是我正在寻找的冒号。 Calling IndexOf(" :")对于肯定包含" :"返回签名值的行

我会尝试在这里粘贴这个字符串,但是给定特殊符号可能很难:

hitchcock.freenode.net 322 petan #hobbiton 5 :ˁ˚ᴥ˚ˀ > Good luck axa!

有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:10)

BCL Blog

记录了这一点

IndexOf()默认进行文化不变对比。

请特别注意:

  

.NET 4 Beta 1的更新为了保持.NET 4与之前版本之间的高兼容性,我们决定还原此更改。 String的默认部分匹配重载和String和Char的ToUpper和ToLower方法的行为现在与.NET 2.0 / 3.0 / 3.5中的行为相同。 .NET 4 Beta 1中存在对原始行为的更改。对于可能导致的任何临时混淆,我们深表歉意。 我们继续建议明确您想要的字符串比较行为,方法是始终为接受它的String上的方法指定StringComparison值。

您应该使用String.IndexOf Method (String, Int32, StringComparison)重载:

例如:

IndexOf(":", StringComparison.Ordinal);

答案 1 :(得分:9)

我看到有些人出于某种原因想要关闭这个问题,所以在这之前我会回答: - )

感谢@vcsjones的评论中的答案,它似乎与语言环境设置有关,可以通过更改来修复

text.IndexOf(" :")

text.IndexOf(" :", StringComparison.Ordinal)

这可能是一个糟糕的答案,但总比没有好......