[i]Ola pessoal,
estou com um probleminha.
Esta dando o seguinte erro no meu programa: “java.lang.StringIndexOutOfBoundsException: String index out of range: -1”
Li que é problema de String, algo assim, mas não tenho a mínima idéia de como resolver. :oops:
Agradeço desde já…
[/i]
L.Bach
#2
Tem o código aí, para podermos dar uma olhada?
Parece erro ao usar o substring, pegando uma posição maior que o tamanho da String.
Vou colocar a parte que esta indicando erro
[code] public String pegaCodigo(final String palavra, final String charInicio, final String charFim){
String str;
int inicio;
int fim;
if(charInicio.equals("--")){
inicio = 0;
fim = palavra.indexOf(charFim);
} else {
inicio = palavra.indexOf(charInicio)+1;
fim = palavra.indexOf(charFim);
}
str = palavra.substring(inicio, fim);
return str;
}[/code]
[quote=eln_santos]Vou colocar a parte que esta indicando erro
se o indexOf do fim for -1 gera o erro, ou seja se a palavra não conter o charfim
[code] public String pegaCodigo(final String palavra, final String charInicio, final String charFim){
String str;
int inicio;
int fim;
if(charInicio.equals("--")){
inicio = 0;
fim = palavra.indexOf(charFim);
} else {
inicio = palavra.indexOf(charInicio)+1;
fim = palavra.indexOf(charFim);
}
str = palavra.substring(inicio, fim);
return str;
}[/code]
[/quote]
não entendi Pedrosa…
vc colocou a msm coisa que eu mandei…
[quote=eln_santos]não entendi Pedrosa…
vc colocou a msm coisa que eu mandei…[/quote]
Tente assim:
public String pegaCodigo(final String palavra, final String charInicio, final String charFim) {
String str = "";
int inicio;
int fim;
if (charInicio.equals("--")) {
inicio = 0;
fim = palavra.indexOf(charFim);
} else {
inicio = palavra.indexOf(charInicio) + 1;
fim = palavra.indexOf(charFim);
}
if(palavra.contains(charFim)){
str = palavra.substring(inicio, fim);
}else{
str = palavra.substring(inicio, palavra.length());
}
return str;
}
O que ocorre se na sua frase não conter o caracter inicial ele assume como 0:
inicio = palavra.indexOf(charInicio) + 1;
Agora o final não tem esse + 1, ou seja verique se contem o caracter atraves do método contains:
if(palavra.contains(charFim)){
str = palavra.substring(inicio, fim);
Acontece que vc tenta dar um substring(0 ,-1) ou qualquer outro numero negativo, faça alguns ajustes no metodo.
[i]Ahhhhh deu certo!!!
brigadãoo pela ajuda!!! [/i]
Melhorando um pouquinho:
De
if(palavra.contains(charFim)){
str = palavra.substring(inicio, fim);
}else{
str = palavra.substring(inicio, palavra.length());
}
Para
str = palavra.contains(charFim) ? palavra.substring(inicio, fim): palavra.substring(inicio);
Refatorei agora tem 3 linhas:
public String pegaCodigo(final String palavra, final String charInicio, final String charFim) {
int inicio = "--".equals(charInicio) ? inicio = 0 : palavra.indexOf(charInicio) + 1;
int fim = "--".equals(charInicio) ? fim = palavra.indexOf(charFim) : palavra.indexOf(charFim);
return palavra.contains(charFim) ? palavra.substring(inicio, fim): palavra.substring(inicio);
}
[quote=Pedrosa]Refatorei agora tem 3 linhas:
public String pegaCodigo(final String palavra, final String charInicio, final String charFim) {
int inicio = "--".equals(charInicio) ? inicio = 0 : palavra.indexOf(charInicio) + 1;
int fim = "--".equals(charInicio) ? fim = palavra.indexOf(charFim) : palavra.indexOf(charFim);
return palavra.contains(charFim) ? palavra.substring(inicio, fim): palavra.substring(inicio);
}
[/quote]
A legibilidade deve ser 3 também…
Não tem nada de mais somente if ternario, de 20 e poucas linhas para 3 acho que vale a pena, mas gosto é gosto! 