1. Modificando strings

Em Java, strings são objetos imutáveis. Isso foi feito para tornar a classe String altamente otimizada e permitir que ela seja usada em qualquer lugar. Por exemplo, apenas tipos imutáveis ​​são recomendados para uso como chaves na coleção HashMap .

No entanto, muitas vezes surgem situações em que os programadores acham mais conveniente que a Stringclasse seja mutável. Eles querem uma classe que não crie uma nova substring toda vez que um de seus métodos é chamado.

Bem, suponha que temos uma string muito grande e precisamos frequentemente adicionar algo ao final dela. Nesse caso, mesmo uma coleção de caracteres ( ArrayList<Character>) pode ser mais eficiente do que recriar e concatenar objetos String constantemente.

É exatamente por isso que um tipo semelhante a String que pode ser alterado foi adicionado à linguagem Java. É chamado StringBuilder.

Criando um objeto

Para criar um StringBuilderobjeto com base em uma string existente, você precisa executar uma instrução como:

StringBuilder name = new StringBuilder(string);

Para criar uma string mutável vazia, você precisa usar uma instrução como esta:

StringBuilder name = new StringBuilder();

Lista de métodos

A StringBuilderclasse tem duas dúzias de métodos úteis. Aqui estão os mais importantes:

Método Descrição
StringBuilder append(obj)
Converte o objeto passado em uma string e o anexa à string atual
StringBuilder insert(int index, obj)
Converte o objeto passado em uma string e o insere na string atual
StringBuilder replace(int start, int end, String str)
Substitui a parte da string especificada pelo intervalo start..end pela string passada
StringBuilder deleteCharAt(int index)
Remove o caractere com o índice especificado da string
StringBuilder delete(int start, int end)
Remove caracteres dentro do intervalo especificado da string
int indexOf(String str, int index)
Procura uma substring na string atual
int lastIndexOf(String str, int index)
Procura uma substring na string atual, começando do final
char charAt(int index)
Retorna o caractere na string no índice passado
String substring(int start, int end)
Retorna a substring definida pelo intervalo especificado
StringBuilder reverse()
Inverte a string atual.
void setCharAt(int index, char)
Altera o caractere no índice especificado para o caractere passado
int length()
Retorna o comprimento da string em caracteres

Aqui está uma breve descrição de cada método


2. Descrição dos métodos:

Acrescentando a uma string

Para adicionar algo a uma string mutável ( StringBuilder), use o append()método. Exemplo:

Código Descrição
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

Convertendo para uma string padrão

Para converter um StringBuilderobjeto em um objeto String, basta chamar seu toString()método. Exemplo

Código Saída
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

Como faço para deletar um personagem?

Para excluir um caractere em uma string mutável, você precisa usar o deleteCharAt()método. Exemplo:

Código Saída
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

Como faço para substituir parte de uma string por outra string?

Para isso existe o replace(int begin, int end, String str)método. Exemplo:

Código Saída
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
MeHello!w


3. Exemplos úteis de como trabalhar com strings

Como faço para inverter uma string?

Existe um método especial para fazer isso — reverse(); Exemplo:

Código Saída
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

StringBufferaula

Existe outra classe — StringBuffer, que é análoga à StringBuilderclasse, mas seus métodos são marcados com o synchronizedmodificador. Isso significa que o StringBufferobjeto pode ser acessado simultaneamente a partir de vários threads.

Mas é muito mais lento do que StringBuilder. Você pode precisar desta classe quando começar a explorar ativamente o multithreading na missão Java Multithreading .