.NET字符串IndexOf意外结果

Saj*_*jee 2 .net c# string indexof

字符串变量str在其中包含以下内容: se\">

我正在尝试使用以下方法找到它的开头:

str.IndexOf("se\\\">")  
Run Code Online (Sandbox Code Playgroud)

返回-1

为什么不找到子串呢?

注意:由于编辑片段显示5x \一段时间,原来连续3个.

Fre*_*örk 8

您的代码实际上正在搜索'se\\">'.在搜索包含反斜杠的字符串时,我通常会发现使用逐字字符串更容易:

str.IndexOf(@"se\"">")
Run Code Online (Sandbox Code Playgroud)

在这种情况下,你在搜索字符串中也有一个引号,所以仍然有一些转义,但我个人觉得它更容易阅读.

更新:我的回答是基于在IndexOf调用参数中引入额外斜杠的编辑.根据当前版本,我会把我的赌注放在str不包含预期的字符序列上.

更新2:根据对此答案的评论,似乎对字符串中'\'字符的作用存在一些混淆.在Visual Studio调试器中检查字符串时,将显示带有转义字符的字符串.

因此,如果您有一个文本框并在其中键入"c:\",则检查调试器中的Text属性将显示"c:\\".为了逃避目的,添加了额外的反斜杠.实际的字符串内容仍然是'c:\'(可以通过检查Length字符串的属性来验证;它将是3,而不是4).

如果我们采用以下字符串(取自下面的评论)

"'<em class = \"correct_response \">一盏夜灯</ em> <br /> <table width = \"100%\"> <tr> <td class = \"right \" >英格丽</ TD> </ TR> </ TABLE>')"

... \"序列只是转义引号; 反斜杠不是字符串内容的一部分.所以,你实际上是在寻找'se">',而不是'se\">'.这些都可以工作:

str.IndexOf(@"se"">");  // verbatim string; escape quotation mark by doubling it
str.IndexOf("se\">");   // regular string; escape quotation mark using backslash
Run Code Online (Sandbox Code Playgroud)