Pedrosa
Parece erro ao usar o substring, pegando uma posição maior que o tamanho da String.
eln_santos
Vou colocar a parte que esta indicando erro
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;
}
Pedrosa
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
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;
}
eln_santos
não entendi Pedrosa…
vc colocou a msm coisa que eu mandei…
Pedrosa
eln_santos:
não entendi Pedrosa…
vc colocou a msm coisa que eu mandei…
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.
eln_santos
[i]Ahhhhh deu certo!!!
brigadãoo pela ajuda!!! [/i]
Pedrosa
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);
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);
}
Bruno_Laturner
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);
}
A legibilidade deve ser 3 também…
Pedrosa
Não tem nada de mais somente if ternario, de 20 e poucas linhas para 3 acho que vale a pena, mas gosto é gosto! 