Problema com String buffer

4 respostas
S

Pessoal …
Tenho o seguinte codigo, to fazendo a exporatação de um db.
Ele executa até certo ponto mas sempre da erro de “RENAGER”.
O que esta errado?

public void trataChave(String linha){
		int marcador = 0;
		int encontrado = 0;
		String valor = "";
		String descri = "";
		StringBuffer sb = new StringBuffer().append(linha);
		//
		for(int i=0;i < sb.length();i++){
			
			/*Estraindo valores*/
			if(sb.substring(i,i+1).equals(",")){
				encontrado = encontrado + 1;
				if(marcador == 0){
					valor = sb.substring(marcador,i);
				} else {
					valor = sb.substring(marcador+1,i);
				}
				//
				switch(encontrado){
					case 1://NUMERICO
						listasBean.setTipo(4);
						if(valor !=null && !valor.equals("")){
							listasBean.setNumero(
								Integer.parseInt(valor));
						}
					break;
					case 2:
						listasBean.setTexto(valor);
					break;
					case 3:
						descri = valor;
					break;
				}
				//System.out.println("enc=" + encontrado + " vl=" + valor);
				marcador = i;
			}
		}
	}

Erro:
String Idex out of range.
Grato pela ajuda.

4 Respostas

ViniGodoy

Parece que tem um erro nesse for:

for(int i=0;i &lt sb.length();i++){

Quando i for do tamanho de sb.length() -1, e como o primeiro caracter de sb tem índice 0, esse o comando

if(sb.substring(i,i+1).equals(",")){

Vai falhar, pois i+1 será igual a sb.length() e, portanto, um índice inválido.

Outra dica. Para dividir um texto nas vírgulas, experimente o comando split.

String[] partes = linha.split(",");

Vai retornar um vetor com várias string, sendo cada uma delas com o que tem entre as vírgulas.

S

cara vc tem alguma coisa com este split?
Ou sugestao para o meu for?
Ja to meio piradao rsss

ViniGodoy

Não tem segredo. O split vai dividir a sua string no lugar do caracter que você passar e retornar um vetor, contendo cada parte em um índice do array.

O que eu sugeriria é trocar o StringBuffer pelo StringBuilder. O StringBuffer é sincronizado e, geralmente, você não precisa disso. Se precisa, geralmente o método que usa o StringBuilder é sincronizado.

S

Certo!
Valeu gente, resolvi o problema de outra forma + estou fazendo unstestes aqui com nosso amigo split.

Criado 14 de dezembro de 2006
Ultima resposta 3 de jan. de 2007
Respostas 4
Participantes 2