我今天刚刚遇到这个问题,想知道是否有人知道为什么这个测试可能会失败(取决于文化)。目的是检查测试文本是否包含两个相邻的空格,这是根据string.IndexOf
(即使我告诉字符串替换所有出现的两个相邻空格)。经过一些测试似乎\xAD
以某种方式导致了这个问题。
public class ReplaceIndexOfSymmetryTest
{
[Test]
public void IndexOfShouldNotFindReplacedString()
{
string testText = "\x61\x20\xAD\x20\x62";
const string TWO_SPACES = " ";
const string ONE_SPACE = " ";
string result = testText.Replace(TWO_SPACES, ONE_SPACE);
Assert.IsTrue(result.IndexOf(TWO_SPACES) < 0);
}
}
是的,我以前也遇到过同样的事情(尽管角色不同)。基本上IndexOf
在查找匹配项时会考虑“特殊”Unicode 字符的各个方面,而Replace
只是将字符串视为代码点序列。
来自IndexOf docs http://msdn.microsoft.com/en-us/library/k8b1470s.aspx:
此方法使用当前区域性执行单词(区分大小写和区域性)搜索。搜索从此实例的第一个字符位置开始,一直持续到最后一个字符位置。
...以及来自Replace http://msdn.microsoft.com/en-us/library/fk49wtc1.aspx:
此方法执行序数(区分大小写且不区分区域性)搜索来查找 oldValue。
你可以使用重载IndexOf
这需要一个StringComparison http://msdn.microsoft.com/en-us/library/system.stringcomparison.aspx,并强制它执行序数比较。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)