一个字符串变量str包含在它里面的某处以下:se\">
.NET字符串的IndexOf意想不到的结果
我试图用找到它的开始:
str.IndexOf("se\\\">")
返回-1
为什么不找到子字符串?
注意:由于编辑该片段显示5x \一段时间,原来有3连续。
一个字符串变量str包含在它里面的某处以下:se\">
.NET字符串的IndexOf意想不到的结果
我试图用找到它的开始:
str.IndexOf("se\\\">")
返回-1
为什么不找到子字符串?
注意:由于编辑该片段显示5x \一段时间,原来有3连续。
您的代码实际上是在搜索'se\\">'
。当字符串包括反斜杠搜索我经常发现它更容易使用逐字字符串:
str.IndexOf(@"se\"">")
在这种情况下,你还可以在搜索字符串报价,因此仍有一些逃逸,但我个人觉得它更容易读。
更新:我的回答是基于在IndexOf
调用中引入了额外斜线的编辑。根据目前的版本,我会把我的赌注放在str
上,而不包含预期的字符序列。
更新2: 基于对这个答案的评论,这似乎是关于字符串中的“\”字符的角色有些混乱。当您在Visual Studio调试器中检查字符串时,它将显示转义字符。因此,如果您有一个文本框并在其中键入'c:\',则在调试器中检查Text属性将显示'c:\\'。为了逃避目的,添加了一个额外的反斜杠。实际的字符串内容仍然是'c:\'(可以通过检查字符串的Length
属性进行验证;它将是3而不是4)。
如果我们采取以下字符串(从下面的评论所)
"“< EM 类= \ " correct_response \ " >一个 夜灯</EM > < BR /> < br/> <表 width = \ " 100%\ " > <TR> < TD 类= \ "右\ " >英格丽</TD > </TR > < /表>“)"
...的\"
序列简单地逃脱引号;反斜杠不是字符串内容的一部分。所以,你实际上是在寻找'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
也许你没有正确地逃避两个字符串中的一个?
编辑您正在搜索的字符串中还有一对\
。
以下代码:
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中工作。
如果您正在寻找SE \“>
然后
str.IndexOf(@"se\"">")
容易出错少,注意双 ”“ 单\
编辑,注释后:看起来这个字符串可能包含ecaping本身,在这种情况下,sep>\“是一个转义引号,所以文本文本是只需se“>和要使用的字符串是Indexof("se\">")
也许str变量实际上并不包含反斜杠。 可能只是在调试时将鼠标悬停在变量上时,调试器工具提示将显示转义字符。
例如如果在此分配后放置断点
string str = "123\"456";
工具提示将显示123“456而不是123”456。
但是,如果你点击可视化图标,你会得到正确的字符串123" 字符串中的456个
双引号需要像""
被指定还要考虑使用逐字字符串 - 因此,一个例子是
var source = @"abdefghise\"">jklmon";
Console.WriteLine(source.IndexOf(@"se\"">")); // returns 8
你在做什么看起来不错,你可以发布实际的代码吗?也许这只是一个小细节... – 2009-06-25 11:41:42
我认为你可能有一个额外的反斜杠 - 你确定它实际上不是“se”> `你想找? – Groo 2009-06-25 11:42:17
看着原始问题和Kev版本,似乎还有很多\在索引中,是一个错误? – Fredou 2009-06-25 11:54:51