Curso de Java – A Classe StringBuilder
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.
Escreva um comentário