"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 |
|---|---|
|
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 StringBuilderobjeto 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 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'.
GO TO FULL VERSION