Pergunta

A cadeia variável str contém o seguinte em algum lugar dentro dele: se\">

Eu estou tentando encontrar o começo dele usando:

str.IndexOf("se\\\">")  

que retorna -1

Por que não é encontrar a substring?

Nota:., Devido à edição do trecho mostrou 5x \ por um tempo, o original tinha 3 em uma linha

Foi útil?

Solução

Seu código é de fato procurando 'se\\">'. Ao procurar por seqüências incluindo barras invertidas Eu costumo achar que é mais fácil de usar cordas textualmente:

str.IndexOf(@"se\"">")

Neste caso, você também tem uma citação na seqüência de pesquisa, por isso ainda há alguns escapar, mas eu pessoalmente encontrá-lo mais fácil de ler.

Atualizar : a minha resposta foi baseado na edição que introduziu cortes extras no parâmetro para a chamada IndexOf. Com base na versão atual, eu colocaria a minha aposta str simplesmente não contendo a sequência de caracteres esperado.

Update 2 : Com base nos comentários sobre esta resposta, parece haver alguma confusão sobre o papel do '\' caractere nas cordas. Quando você inspecionar uma corda no depurador Visual Studio, ele será exibido com escapar caracteres.

Então, se você tem uma caixa de texto e digite 'c: \' nele, inspecionando a propriedade Text no depurador irá mostrar 'c: \\'. Uma barra extra é adicionado para fins de escapar. O conteúdo seqüência real ainda é 'c: \'. (Que pode ser verificado, verificando a propriedade Length da corda, que será 3, não 4)

Se tomarmos o seguinte string (retirado do comentário abaixo)

" ' a luz da noite

Ingrid
') "

... as seqüências \" são simplesmente escapou aspas; as barras invertidas não são parte do conteúdo da string. Então, você está na verdade procurando 'se">', não 'se\">'. Qualquer um destes trabalhos vontade:

str.IndexOf(@"se"">");  // verbatim string; escape quotation mark by doubling it
str.IndexOf("se\">");   // regular string; escape quotation mark using backslash

Outras dicas

Isso funciona:

string str = "<case\\\">";
int i = str.IndexOf("se\\\">"); // i = 3

Talvez você não está corretamente escapar uma das duas cordas?

Editar , há um par extra de \ na corda que você está procurando.

Talvez a variável str não contém realmente a barra invertida. Pode ser apenas que quando você passa o mouse sobre a variável durante a depuração, a dica de ferramenta depurador irá mostrar o caractere de escape.

por exemplo. Se você colocar um ponto de interrupção após esta atribuição

string str = "123\"456";

a dica irá mostrar 123 \ "456 e não 123" 456.

No entanto, se você clicar no ícone visualize, você vai obter a seqüência correta 123" 456

o seguinte código:

public static void RunSnippet()
{
    string s = File.ReadAllText (@"D:\txt.txt");
    Console.WriteLine (s);
    int i = s.IndexOf("se\\\">");
    Console.WriteLine (i);
}

Dá seguinte resultado:

some text before se\"> some text after
17

Parece que trabalhar para mim ...

TextBox2.Text = TextBox1.Text.IndexOf("se\"">")

parece funcionar em VB.

de aspas dentro de uma necessidade string a ser especificado como "" Considere também usando cordas Verbatim - Então, um exemplo seria

var source = @"abdefghise\"">jklmon";
Console.WriteLine(source.IndexOf(@"se\"">"));  // returns 8

Se você está à procura de se \ ">

então

str.IndexOf(@"se\"">") 

é menos propenso erro de. Observe o dobro "" e único \

Editar, depois do comentário: parece que a seqüência pode conter ecaping si, caso em que, em se \ "> \" foi uma cotação escapado, então o texto literal é simplesmente se "> e a corda para uso é Indexof("se\">")

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top