[RESOLVIDO] StringBuilder instanciado c/ StringBuilder(int) dando StringIndexOutOfBoundsExcepti

3 respostas
W

Olá, galera!

Estou tendo problema na utilização do StringBuilder, e gostaria de saber aonde estou errando e de que forma poderia contornar o problema.
Preciso gerar um txt contendo várias linhas. Cada linha conterá os dados de um registro. E cada “bloco” de cada linha, conterá um dado específico do registro.

Pela pesquisa que fiz, vi que poderia implementar isso com a utilização do StringBuilder.

Mas o problema é que quando tento fazer, por exemplo:

StringBuilder sb = new StringBuilder(100); sb.insert(1, "umastringqualquer");
Recebo a exceção:
java.lang.StringIndexOutOfBoundsException: String index out of range: 1

Porém, se eu fizer:

StringBuilder sb = new StringBuilder(); sb.append(" [i]imagine que aqui haja 100 espaços em branco[/i] "); sb.insert(1, "umastringqualquer");
não recebo erro nenhum.

É claro, não estou pensando em implementar a segunda forma, só a fiz para teste.
A minha dúvida é: se no primeiro caso, eu defini um tamanho para o StringBuilder, já em sua instanciação, por que recebo o erro de StringIndexOutOfBoundsException ao tentar inserir uma string nele?

PS: se alguém tiver uma sugestão “melhor” de como criar o arquivo txt, sem a utilização do StringBuilder, eu também aceito.

3 Respostas

E

Capacidade != tamanho

Quando você diz que a capacidade é 100 (new StringBuilder(100)) está apenas dizendo que o StringBuilder contém um array de caracteres reservado para ele, com tamanho 100. Não está dizendo que o tamanho (ou seja, dados efetivamente copiados para dentro do Stringbuilder) é 100.

É por isso que insert está dando esse erro StringIndexOutOfBounds porque na hora que você tentou fazer isso, o tamanho era 0, embora a capacidade fosse 100.

W

Obrigado pela resposta!

Então, pelo que vi dos métodos existentes em StringBuilder, não há como definir um TAMANHO para ele.

Portanto, ao que me parece, o StringBuilder só é realmente útil para casos em que você queira inserir uma string dentro de um texto já existente.

Não é exatamente isso que quero.
Eu preciso criar uma nova linha no arquivo txt e após isso, inserir cada string, representando um dado específico, em seu respectivo local.

Eu poderia utilizar o StringBuilder com o .append, utilizando espaços em branco, mas isso me parece muito gambiarrístico.

Alguma ideia de como eu poderia fazer isso de forma mais “profissional”?

W

Tópico resolvido. Esqueci de avisar antes…

Resolvi meu problema com String.format(). Como pude não lembrar imediatamente algo tão simples?

Criado 19 de março de 2013
Ultima resposta 10 de abr. de 2013
Respostas 3
Participantes 2