的字符串变量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\">")

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top