Usuário com melhor resposta
Substring dando exceção

Pergunta
-
To com uma exceção que nao to conseguindo resolver
é um código simples para que uma Label não ultrapasse o espaço dela no UI
mas quando compilo o programa, ele da essa exceção
Index and length must refer to a location within the string.
Parameter name: lengthesse é o código
if (Texto.Length > 20) { index.Status = "Checking File: " + ". . ." + Texto.Substring(15, Texto.Length); Thread.Sleep(4000); }
e ja troquei para valores aleatórios, e alguns funcionam outros nao
por exemplo
Substring(15,20) funciona, mas (16,20) da erro... o.O
- Editado Yuri Schmitz sábado, 16 de fevereiro de 2013 18:20
Respostas
-
É uma lógica simples mais difícil de explicar. rsrs
No substring primeiro parâmetro e o inicio onde ele vai começar a ler. Então posição 5. No segundo parâmetro quantas posição ele vai ler a parti da posição 5(primeiro parâmetro). A string tem o tamanho de 10. Então se ele já esta na posição 5, ai 10 - 5(texto.Length-5) ele tem que tirar as cincos primeiras posições.
Console.WriteLine(texto.SubString(5, texto.Length-5) // Ficaria assim (5, 10 - 5) mesma coisa que (5,5) // 10 = tamanho da string // -5 é para tirar as cincos primeiras posições
Espero que pode ser um pouco mais claro.
- Sugerido como Resposta Samuel Rodrigues dos Anjos terça-feira, 19 de fevereiro de 2013 23:54
- Marcado como Resposta Yuri Schmitz segunda-feira, 4 de março de 2013 14:42
Todas as Respostas
-
-
-
texto.Length não modifica, ele pega o número de caracteres da sua string.
Comentando o código do Wellington para você entender:
string texto = "Pegar os ultimos caracteres com substring"; //Essa linha verifica se a string é maior que 20 caracteres if (texto.Length > 20) { //essa linha cria uma nova string pegando do 15 campo da string até o a posição do fim da string - 15 caractere string str = texto.Substring(15, texto.Length - 15); }
- Sugerido como Resposta Afonso Fernandes segunda-feira, 18 de fevereiro de 2013 15:03
-
Então, mas eu não estou intendendo por que "texto.Length - 15" é o fim, porque pra mim "texto.Length" era o fim da string...
por exemplo
string texto = "1234567890"; Console.WriteLine(texto.Length); //o resultado será 10 né? // entao se eu quiser pegar uma certa parte da string até o final eu teria que fazer Console.WriteLine(texto.Substring(5, texto.Length); // (5 , 10) //mas se fizer isso vai da erro, o compilador ta intendendo como se fosse (5, 10+5) entao teria que fazer Console.WriteLine(texto.SubString(5, texto.Length-5) // O Compilador vai intender como (5, 10+5-5) // só nao to intendendo porque isso acontece!
resumindo, em java se eu quiser pegar apenas o "890"fica assim:
texto.substring(8, texto.length());
em C# fica:
texto.Substring(9, texto.Length - 9)
Porque esse "-9"
- Editado Yuri Schmitz terça-feira, 19 de fevereiro de 2013 19:57
-
É uma lógica simples mais difícil de explicar. rsrs
No substring primeiro parâmetro e o inicio onde ele vai começar a ler. Então posição 5. No segundo parâmetro quantas posição ele vai ler a parti da posição 5(primeiro parâmetro). A string tem o tamanho de 10. Então se ele já esta na posição 5, ai 10 - 5(texto.Length-5) ele tem que tirar as cincos primeiras posições.
Console.WriteLine(texto.SubString(5, texto.Length-5) // Ficaria assim (5, 10 - 5) mesma coisa que (5,5) // 10 = tamanho da string // -5 é para tirar as cincos primeiras posições
Espero que pode ser um pouco mais claro.
- Sugerido como Resposta Samuel Rodrigues dos Anjos terça-feira, 19 de fevereiro de 2013 23:54
- Marcado como Resposta Yuri Schmitz segunda-feira, 4 de março de 2013 14:42
-
Valeu cara, deu pra intender sim, ficou meio que na decoreba, porque em java não lembro de ter o -5, acredito que seja mais normal, trazendo para uma situação real, onde alguem fala
"Olha quero que você pegue essa estrada no KM 10 até o final dela (km 30)
o raciocínio do cara é só sair da estrada quando ele ver a placa de valor "KM 30" e não KM 30 - 10
Consegue intender, acredito que fique muito melhor, mas fazer o que né? :p
é como se o primeiro parâmetro fosse o inicio, e o segundo quanto ele vai percorrer e não o final
então você falaria
"Olha quero que voce pegue essa estrada no KM 10 e so saia quando percorrer 20 KM"
- Editado Yuri Schmitz segunda-feira, 4 de março de 2013 14:51