Problemas com StringIndexOutOfBoundsException

11 respostas
eln_santos

[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á… :wink: [/i]

11 Respostas

L.Bach

Tem o código aí, para podermos dar uma olhada?

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);
}
B

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! :wink:

Criado 4 de março de 2009
Ultima resposta 5 de mar. de 2009
Respostas 11
Participantes 4