【发布时间】:2011-02-07 15:39:37
【问题描述】:
我今天刚刚遇到这个问题,想知道是否有人知道为什么这个测试可能会失败(取决于文化)。目的是检查测试文本是否包含两个相邻的空格,根据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);
}
}
【问题讨论】:
-
我不确定这是否会成为您的问题,但如果您在此测试中彼此相邻有 3 个空格,那么您最终会在结束时彼此相邻 2它。
-
我的测试成功了。您确定您发布的代码与您正在测试的代码相同吗?
-
问题是
IndexOf使用特定于文化的搜索,而Replace使用序数搜索。 @Chris:关键是它应该失败。 -
@Jaroslav:我认为你的意思是“它可能会失败”——取决于当前的文化?
-
@Chris:更像是“他预计它会失败”。无论如何,这种毫无意义的讨论 - 我已经指定它是特定于文化的。