如何比较多行的字符串

时间:2013-07-09 09:47:43

标签: c# string comparison

我有一个生成以下内容的方法,我将其保存在字符串中,假设字符串是名称output

HDRPB509030978SENTRIC MUSIC                                01.102013070914290620130709               
GRHREV0000102.100000000000  
REV0000000000000000AWAITING YOUR CALL                                          EN00000000044021                               POP000436Y      ORI         PHIL 
TRL000010000000100000022   

我正在尝试的是硬编码上面的行并将其与生成的输出进行比较。我这样硬编码我用\ n这样替换下一行

string hardCoded = "    HDRPB509030978SENTRIC MUSIC                              \n01.102013070914290620130709                   \n    GRHREV0000102.100000000000      \n    REV0000000000000000AWAITING YOUR CALL                                          \nEN00000000044021                               POP000436Y      ORI         PHIL     \n    TRL000010000000100000022   "

现在我比较

output == hardCoded 

OR

Assert.AreEqual(output,hardCoded);

是假的。如何比较这两个

1 个答案:

答案 0 :(得分:4)

比较多行字符串与比较单行字符串没有什么不同:您比较的字符串必须符合字符,包括空格和换行符。如果生成的字符串使用\r\n分隔符而不是\n,那么您希望获得的字符串常量也必须包含相同的分隔符。您可以通过设置断点来检查所使用的分隔符的类型,并检查在调试器中生成的字符串。

不要对字符串进行硬编码以进行单元测试,而应考虑从资源中读取它。这将允许您在文本编辑器中编辑字符串,并在视觉上检查它是否存在差异。

最后,如果你不需要匹配空格,你可以定义一个比较字符串排除空格的函数:

static bool EqualsExcludingWhitespace(String a, String b) {
    return a.Where(c => !Char.IsWhiteSpace(c))
       .SequenceEqual(b.Where(c => !Char.IsWhiteSpace(c)));
}