Curso de Java – A Classe StringBuilder
A classe StringBuilder em Java é empregada na criação e manipulação de informações do tipo string dinâmicas, ou seja, strings que são modificáveis. Seu uso é altamente recomendado em programas onde as strings são frequentemente concatenadas ou sofrem algum outro tipo de manipulação.
Esta classe possui três construtores principais:
- É possível criar um objeto StringBuilder sem passar nenhum argumento ao construtor, criando assim um objeto com capacidade padrão inicial de 16 caracteres. A capacidade aumenta de acordo com a informação que é armazenada no objeto.
- Outra possibilidade é passar um número inteiro ao método construtor, especificando a capacidade (número de caracteres) que o objeto terá inicialmente.
- Muito comum também é passar como argumento uma string de caracteres, que criará um objeto contendo esses caracteres. Neste caso, a capacidade inicial será o número de caracteres passados mais 16.
Para exibir o valor armazenado em uma StringBuilder, podemos usar o método toString, por exemplo com as funções printf ou println.
Vejamos exemplos da criação de objetos com StringBuilder.
StringBuilder string1 = new StringBuilder();
StringBuilder string2 = new StringBuilder(49);
StringBuilder string3 = new StringBuilder("Bóson Treinamentos");
System.out.printf("string1 = \"%s\"%n", string1);
System.out.printf("string2 = \"%s\"%n", string2);
System.out.printf("string3 = \"%s\"%n", string3);
Alguns métodos comuns da classe StringBuilder
Vamos estudar agora alguns métodos bastante comuns, que incluem os métodos length, capacity, ensureCapacity e setLength.
- Método length: Retorna o número de caracteres armazenados no momento no objeto
- Método capacity: Mostrea o número de caracteres que podem ser armazenados no objeto sem a necessidade de alocar mais memória.
- Método ensureCapacity: Garante que o objeto tenha, no mínimo, a capacidade especificada.
- Método setLength: Aumenta ou diminui o comprimento de um objeto.
Vejamos exemplos de uso desses métodos.
StringBuilder string1 = new StringBuilder("Bóson Treinamentos");
System.out.printf("string1 = %s%nComprimento = %d%nCapacidade = %d%n%n",
string1.toString(), string1.length(), string1.capacity());
string1.ensureCapacity(50);
System.out.printf("Nova capacidade é = %d%n%n", string1.capacity());
string1.setLength(15);
System.out.printf("O novo comprimento é = %d%nstring1 = %s%n", string1.length(), string1.toString());
Como manipular caracteres em um objeto StringBuilder
Vários métodos são fornecidos para a manipulação de caracteres nos objetos da classe. Entre eles, destacamos os seguintes:
- Método charAt – Recebe um inteiro como argumento e retorna o caractere armazenado no objeto, na posição desse número de índice.
- Método setCharAt – Recebe dois argumentos: um inteiro e um caractere, gravando o caractere passado na posição especificada pelo valor inteiro.
- Método getChars – Copia caracteres de uma StringBuilder para um array de caracteres que é passado como argumento ao método. O método usa quatro argumentos: valor de índice inicial a partir do qual os caracteres serão copiados, índice final do último caractere a ser copiado + 1, o array de caracteres que recerberá os caracteres copiados, e o índice (local) do array onde se iniciará a cópia dos caracteres.
- Método reverse – Este método inverte o conteúdo do objeto – ou seja, reverte a string armazenada.
Vejamos exemplos desses métodos.
StringBuilder string1 = new StringBuilder("bóson treinamentos");
System.out.printf("string1 = %s%n", string1.toString());
System.out.printf("Caractere na posição 0: %s%nCaractere na posição 7: %s%n%n",string1.charAt(0), string1.charAt(7));
char[] arrayCaracteres = new char[string1.length()];
string1.getChars(0, string1.length(), arrayCaracteres, 0);
System.out.print("Os caracteres armazenados são: ");
for (char c : arrayCaracteres)
System.out.print(c);
string1.setCharAt(0, 'B');
string1.setCharAt(6, 'T');
System.out.printf("%n%nstring1 = %s", string1.toString());
string1.reverse();
System.out.printf("%n%nstring1 = %s%n", string1.toString());
Como acrescentar valores em um objeto StringBuilder
Usamos o método sobrecarregado append para adicionar valores de vários tipos ao objeto criado. É possível anexar valores de vários tipos, como tipos primitivos, arrays de caracteres, objetos, Strings, e outros. Como exemplo, vamos acrescentar diversos dados, de vários tipos, a um objeto criado:
String palavra = "Bóson";
char[] arrayCaract = {'F', 'A', 'B', 'I', 'O'};
boolean valorBool = true;
char caractere = 'T';
int valorInteiro = 33;
float valorFloat = 21.5f;
double valorDouble = 100.1953;
StringBuilder outraString = new StringBuilder("Fábio dos Reis");
StringBuilder string1 = new StringBuilder();
string1.append(palavra)
.append("\n")
.append(arrayCaract)
.append("\n")
.append(arrayCaract, 0, 3)
.append("\n")
.append(valorBool)
.append("\n")
.append(caractere)
.append("\n")
.append(valorInteiro)
.append("\n")
.append(valorFloat)
.append("\n")
.append(valorDouble)
.append("\n")
.append(outraString);
System.out.printf("Conteúdo do objeto StringBuilder: %n%s%n", string1.toString());
Concatenação de strings com StringBuilder
Podemos concatenar strings facilmente usando o método append. Veja o exemplo a seguir:
String texto1 = "Bóson";
String texto2 = "Treinamentos";
int idade = 6;
String resultado = new StringBuilder().append(texto1).append(" ").append(texto2).append(" ").append(idade).append(" ").append("anos!").toString();
System.out.printf("%s",resultado);
Neste exemplo concatenamos strings de caracteres, conteúdo de variáveis do tipo String e números inteiros em um objeto de nome resultado.
Obs.: Objetos StringBuilder não não são seguros em threads múltiplas. Se várias threads precisarem acessar a mesma informação de string dinâmica, é recomendável usar a classe StringBuffer, a qual oferece funcionalidade idêntica à classe StringBuilder, mas com segurança em threads.
Na segunda parte deste tutorial vamos estudar mais alguns métodos importantes da classe StringBuilder, como os métodos insert, delete e deleteCharAt, entre outros.
