"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 StringBuilder
objeto 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 StringBuilder
classe tem duas dúzias de métodos úteis. Aqui estão os mais importantes:
Método | Descrição |
---|---|
|
Converte o objeto passado em uma string e o anexa à string atual |
|
Converte o objeto passado em uma string e insere no meio da string atual |
|
Substitui a parte da string especificada pelo intervalo start..end pela string passada |
|
Remove o caractere com o índice especificado da string |
|
Remove caracteres dentro do intervalo especificado da string |
|
Procura uma substring na string atual |
|
Procura uma substring na string atual, começando do final |
|
Retorna o caractere na string no índice passado |
|
Retorna a substring definida pelo intervalo especificado |
|
Inverte a string atual. |
|
Altera o caractere no índice especificado para o caractere passado |
|
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 |
---|---|
|
Hi |
Convertendo para uma string padrão
"Para converter um StringBuilder
objeto em um objeto String, basta chamar o toString()
método dele. Exemplo
Código | Saída |
---|---|
|
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 |
---|---|
|
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 |
---|---|
|
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 |
---|---|
|
olleH |
"Além da StringBuilder
classe, Java tem outra classe parecida com string chamada StringBuffer
. É um análogo da StringBuilder
classe, mas seus métodos são marcados com o synchronized
modificador."
"O que isso significa?"
"Isso significa que o StringBuffer
objeto 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'.
GO TO FULL VERSION