.NET字符串的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)
如果我们采取以下的字符串(从下面的评论截取)
”“一 夜灯 <无线电通信 />
<表 宽度= \ “100%\”>')“ 英格丽
...的\"
序列简单地逃脱引号;反斜线是不是字符串内容的一部分。所以,你其实找'se">'
,不'se\">'
。任一这些将工作:
str.IndexOf(@"se"">"); // verbatim string; escape quotation mark by doubling it
str.IndexOf("se\">"); // regular string; escape quotation mark using backslash
其他提示
此工作的:
string str = "<case\\\">";
int i = str.IndexOf("se\\\">"); // i = 3
也许你没有正确地转义两个字符串中的一个?
修改的有您正在搜索的字符串中的一个额外的夫妇\
的。
也许str变量实际上不包含反斜线。 它可能只是,当你将鼠标放在变量在调试时,调试器提示会显示转义字符。
e.g。如果你把一个断点这个任务后
string str = "123\"456";
工具提示将显示123 \ “456和不123” 456。
然而,如果你点击可视化图标,你会得到正确的字符串123" 456
以下代码:
public static void RunSnippet()
{
string s = File.ReadAllText (@"D:\txt.txt");
Console.WriteLine (s);
int i = s.IndexOf("se\\\">");
Console.WriteLine (i);
}
给出以下输出:
some text before se\"> some text after
17
好像工作,我...
TextBox2.Text = TextBox1.Text.IndexOf("se\"">")
似乎在VB工作。
的字符串双引号内需要指定像""
还要考虑使用逐字串 - 因此,一个例子是
var source = @"abdefghise\"">jklmon";
Console.WriteLine(source.IndexOf(@"se\"">")); // returns 8
如果您正在寻找的 SE \“>
然后
str.IndexOf(@"se\"">")
是不容易出错。注意双“”和单\
编辑,注释后:这似乎是字符串可能包含ecaping本身,在这种情况下,在 SE \ “> 的 \”是一个转义引号,因此字面文字只是的 SE“> 并使用该字符串是Indexof("se\">")