字符串变量 str 在其内部某处包含以下内容:se\">
我正在尝试使用以下方法找到它的开头:
str.IndexOf("se\\\">")
返回-1
为什么找不到子字符串?
注意:由于编辑片段显示 5x\一段时间,原来有 3 个连续。
最佳答案
您的代码实际上是在搜索 'se\\">'
。在搜索包含反斜杠的字符串时,我通常发现使用逐字字符串更容易:
str.IndexOf(@"se\"">")
在这种情况下,您在搜索字符串中也有一个引号,因此仍然存在一些转义,但我个人认为它更易于阅读。
更新:我的回答是基于在 IndexOf
调用的参数中引入额外斜杠的编辑。根据当前版本,我会赌 str
根本不包含预期的字符序列。
更新 2: 根据对此答案的评论,字符串中“\”字符的作用似乎有些困惑。当您在 Visual Studio 调试器中检查字符串时,它会显示转义字符。
因此,如果您有一个文本框并在其中键入“c:\”,检查调试器中的 Text 属性将显示“c:\\”。添加一个额外的反斜杠用于转义。实际的字符串内容仍然是 'c:\'(可以通过检查字符串的 Length
属性来验证;它将是 3,而不是 4)。
如果我们采用以下字符串(取自下面的评论)
" '<em class=\"correct_response\">a night light</em><br /><br /><table width=\"100%\"><tr><td class=\"right\">Ingrid</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
关于c# - .NET 字符串 IndexOf 意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1043447/