Problemas com StringIndexOutOfBoundsException

[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]

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