c# - .NET 字符串 IndexOf 意外结果

标签 c# .net string indexof

字符串变量 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/

相关文章:

C# - 两个大字符串数组的模糊比较

带组合框的 C# 消息框

.net - 我可以从 FTP 服务器或 HTTP 服务器读取文件作为流吗?

c# - EntityContainer 名称必须是唯一的。已定义名称为 'Entities' 的 EntityContainer

c# - SQL bigint 哈希匹配 c# int64 哈希

asp.net - DropDownList 的 SelectedValue 与 SelectedItem.Value

r - 在R中,如何通过分组变量将字符串变量折叠在数据框中?换句话说,垂直粘贴而不是水平粘贴

java - 获取字符串中的bytedata数据

c - 如何在c中输入多个字符串?

c# - 如何使用 Linq 在 C# 列表中添加缺失值列表