.net和IndexOf中的特殊符号

本文关键字:特殊符号 IndexOf net | 更新日期: 2023-09-27 18:22:00

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

字符串实例的IndexOf()方法是为某些特殊符号返回有符号值(-1或更低)

例如,我有一个字符串,其中包含一些特殊的unicode字符,在这个字符串的某个地方是我正在寻找的冒号。对于肯定包含" :"的行的Calling IndexOf(" :")返回有符号值

我会尝试在这里粘贴这个字符串,但考虑到特殊的符号,它可能很难:

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

有办法解决这个问题吗?

.net和IndexOf中的特殊符号

这在BCL博客上有记录

默认情况下,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方法(String,Int32,StringComparison)重载:

例如:

IndexOf(":", StringComparison.Ordinal);

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

感谢@vcsjones在评论中的回答,它似乎与区域设置有关,可以通过更改来修复

text.IndexOf(" :")

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

这可能是一个糟糕的答案,但总比什么都没有好。。。