"Saudações, Amigo!"

"Olá, Rishi!"

"Agora você sabe o suficiente sobre strings para aprender algo interessante. Mais especificamente, uma nova classe semelhante, mas não exatamente igual, à classe String."

"Parece intrigante, embora não esteja totalmente claro para mim como as strings comuns falham e por que outras classes semelhantes a strings são necessárias."

"Vamos começar com o fato de que strings são objetos imutáveis ​​em Java."

"Como assim? Eu esqueci... Ou eu nunca soube para começar..."

"Deixe-me lembrá-lo de que objetos imutáveis ​​são aqueles cujos estados não podem ser alterados depois de criados."

"Ahhh... Por que strings são imutáveis ​​em Java?"

"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 classe String seja mutável. Eles querem uma classe que não crie uma nova substring toda vez que um de seus métodos é chamado."

"Mas para que serve?"

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

"E é por isso que precisamos de strings que não sejam exatamente a classe String?"

"Exatamente. A linguagem Java adicionou um tipo semelhante a String que pode ser alterado. Chama-se 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 insere no meio da 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

"E agora vou descrever brevemente cada um desses métodos para você.

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 o toString()método dele. 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

"Parece conveniente. Obrigado, Rishi."

"Não mencione isso. Que tal isso, você pode virar uma corda para trás? Como você faria isso?"

"Bem... eu criaria um StringBuilder, colocaria uma string nele... Então criaria uma nova string, e em um loop do último caractere para o primeiro... Ou talvez um deslocamento bit a bit...

"Nada mal. Mas poderia ser mais rápido. 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

"Além da StringBuilderclasse, Java tem outra classe parecida com string chamada StringBuffer. É um análogo da StringBuilderclasse, mas seus métodos são marcados com o synchronizedmodificador."

"O que isso significa?"

"Isso significa que o StringBufferobjeto pode ser acessado simultaneamente a partir de vários segmentos."

"Ainda não estou muito familiarizado com threads. Mas 'pode ser acessado de vários threads' é claramente melhor do que 'não pode ser acessado de vários threads'... Por que não usar sempre? StringBuffer"

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

"Vou escrever isso na minha memória para não esquecer. Marcado 'para o futuro'.