Independentemente da região em que nos encontramos ou a linguagem na qual codificamos nossas aplicações, com certeza, os caracteres são um elemento muito importante para a execução de um programa, seja ele qual for. Transmitindo mensagens em telas ou durante o desenvolvimento, entender a Classe Java String é de extrema importância para quem programa nessa linguagem, acredite.
Pode parecer muito difícil às pessoas iniciantes na área saber dar o devido tratamento aos caracteres e seus conjuntos, sem ter nenhum problema durante a manipulação desse elemento ao aplicar soluções em ambientes Java. Isso acontece, até mesmo, às mais antigas, mas que ainda engatinham na linguagem da xícara de café.
Se você estiver em um desses grupos, anime-se! Agora será o momento em que você compreenderá todos os principais aspectos que compõem a classe String, assim como exemplos práticos de como realizar a sua implementação. Além disso, você verá uma lista com todos os métodos possíveis de serem utilizados, com a uma explicação de cada um deles.
Veremos os seguintes tópicos:
- O que é a classe Java String?
- O que é são as classes StringBuilder e StringBuffer?
- O que é a classe CharBuffer?
- Por que Java Strings são imutáveis?
- Quais os métodos do Java String que podem ser utilizados em aplicações? Veja a tabela completa!
Então, prepare sua IDE e vamos nessa!
O que é a classe Java String?
A classe String, em Java, é utilizada para representar Strings. Strings, por sua vez, nada mais são do que sequências de caracteres, podendo ser criadas por meio de uma string literal, que é um texto entre aspas.
Veja o exemplo, logo abaixo:
//Para declarar uma String literal é bem simples, fazemos assim, em Java:
String minhaString = "Isto é uma String literal";
Ou, de outra forma, usando o método new:
String minhaString = new String("Olá, Mundo!");
Alternativamente, strings podem ser criadas usando a classe StringBuilder ou StringBuffer.
O que é são as classes StringBuilder e StringBuffer?
As classes StringBuilder e StringBuffer são usadas para criar objetos que representam sequências modificáveis de caracteres. Essas classes foram criadas para sanar um problema de objetos string “perdidos” na memória durante algumas implementações da linguagem.
A principal diferença entre as duas é que a classe StringBuilder é uma versão não-sincronizada da classe StringBuffer, ou seja, ela não possibilita a exclusividade do acesso ao seu conteúdo pelas threads. Já a classe StringBuffer é uma versão sincronizada, então, ela garante que somente uma instância terá acesso ao objeto por vez.
De maneira geral, os métodos sincronizados garantem que o acesso ao objeto ocorra em apenas um único fluxo de controle, de maneira sequencial e isolada dentro de uma aplicação Java. Veja, na sequência, a utilização de ambas as classes String.
1. Implementando a classe StringBuffer
A seguir, você pode conferir a implantação da classe StringBuffer e verificar seu funcionamento em sua própria máquina. Você poderá perceber o uso de um método no código, tema que abordaremos na próxima parte deste nosso guia.
import java.nio.*;
import java.util.*;
public class Sb3 {
public static void main(String[] args) {
StringBuilder stb = new StringBuilder();
stb.append("beTrybe");
stb.append(4);
System.out.println(stb);
/*usando o método reverse() da classe:*/
System.out.println(stb.reverse());
}}
A saída para o código deverá ser:
beTrybe4
4ebyrTeb
2. Implementando a classe StringBuilder
Agora, você confere uma implementação bem simples da classe StringBuilder. Lembre-se de que você poderá utilizar esse exemplo e modificá-lo durante sua leitura para melhor fixação do conteúdo.
import java.nio.*;
import java.util.*;
public class StBuilder{
public static void main(String[] args) {
StringBuilder stba= new StringBuilder("beTrybe");
//metodo que remove pelo indice 0 - 1
stba.delete(1, 2);
System.out.println(stba);
stba.append("java");
//insere na posição 2 uma exclamação
stba.insert(1,"X");
System.out.println(stba);
stba.append("strings");
System.out.println(stba.toString());
}}
A saída para esses comandos será essa:
bTrybe
bXTrybejava
bXTrybejavastrings
Uma vantagem que encontramos em usar a classe StringBuilder ou a StringBuffer está no controle maior dos objetos do tipo String, Dessa maneira, eles não ficarão perdidos na memória e, com isso, você terá uma aplicação mais otimizada.
O que é a classe CharBuffer?
O CharBuffer é uma classe abstrata do pacote java.nio, e é utilizada como um buffer para caracteres. Um buffer, nesse caso, pode ser definido como um espaço temporário de armazenamento, durante a transferência de dados e do processamento de sua aplicação.
O objeto CharBuffer é criado usando o método allocate(), passando a capacidade do CharBuffer para que o método possa alocar os caracteres. Confira a sintaxe e um exemplo, logo abaixo.
Sintaxe
public static CharBuffer allocate(int)
Repare que o “int” designa a quantidade limite para o buffer, e será sempre um número inteiro. Veja, no exemplo, como utilizá-lo.
Como funciona o método allocate() em Java
import java.nio.*;
import java.util.*;
public class testebetrybe {
public static void main(String[] args)
{
// Aqui, declaramos a capacidade de nosso buffer assim como o objeto CharBuffer:
char capacidadeA = 10;
CharBuffer bt = CharBuffer.allocate(capacidadeA);
// Declarando o valor de cada um, usando o método put():
bt.put('b');
bt.put('t');
// Aqui imprimimos nosso objeto, o CharBuffer:
System.out.println("CharBuffer: "
+ Arrays.toString(bt.array()));
}
}
O resultado do código que trouxemos como exemplo deverá ser parecido com esse:
CharBuffer: [b, t, , , , , , , , , ]
Por que Java Strings são imutáveis?
Quando aprendemos a classe String e os dados de tipo caractere, em Java, sempre ouvimos dizer que as Strings são imutáveis, mas por que isso acontece? As Java Strings têm essa característica porque a linguagem Java foi projetada para garantir que as strings sejam manipuladas de forma segura em um ambiente multithread.
Se uma string fosse mutável durante a execução das aplicações, isso poderia causar problemas de concorrência entre as instâncias que tentam modificar a string ao mesmo tempo. Além disso, as strings, sendo imutáveis, são mais eficientes do ponto de vista do desempenho, pois não precisam ser copiadas toda vez que forem modificadas.
Quais os métodos do Java String que podem ser utilizados em aplicações? Veja a tabela completa!
Existe uma série de métodos passíveis de utilização pelas pessoas desenvolvedoras ao lidar com a classe String em ambientes Java. Para ajudar você a saber quais são, trouxemos, a seguir, uma lista com cada um desses métodos.
Você pode usar os exemplos que já mostramos e ir substituindo os métodos utilizados para praticar e fixar melhor o que você está estudando. Lembre-se de que é mais fácil aprender programação praticando!
Método | Descrição | Tipo |
charAt() | Retorna à posição em que o char se encontra. | char |
codePointAt() | Retorna o char em Unicode no índice especificado. | int |
codePointBefore() | Retorna o char em Unicode antes do índice especificado. | int |
codePointCount() | Retorna o número de valores em Unicode encontrados em uma String. | int |
compareTo() | Compara duas Strings. | int |
compareToIgnoreCase() | Compara duas Strings, ignorando diferenças entre maiúsculas e minúsculas. | int |
concat() | Anexa uma String no fim de outra. | String |
contains() | Verifica se uma string contém uma sequência de caracteres. | boolean |
contentEquals() | Checa se uma String contém exatamente a mesma sequência de caracteres do CharSequence ou StringBuffer especificado no método. | boolean |
copyValueOf() | Retorna uma String — ela representa os caracteres do array de caracteres especificado. | String |
endsWith() | Verifica se a string termina com o caractere especificado. | boolean |
equals() | Compra duas Strings. | boolean |
equalsIgnoreCase() | Compra duas Strings, ignorando diferenças de maiúsculas e minúsculas. | boolean |
format() | Retorna uma String formatada, usando uma localidade especificada no método. | String |
getBytes() | Codifica esta String em uma sequência de bytes. | byte[] |
getChars() | Copia caracteres de uma String pra um array. | void |
hashCode() | Retorna o código hash para a String especificada. | int |
indexOf() | Retorna a posição da primeira ocorrência em uma string. | int |
intern() | Retorna a representação canônica para o objeto String especificado. | String |
isEmpty() | Verifica se uma string está vazia ou não. | boolean |
lastIndexOf() | Retorna a posição da última ocorrência encontrada. | int |
length() | Retorna o comprimento de uma string. | int |
matches() | Pesquisa uma string por uma correspondência com uma expressão regular e a retorna. | boolean |
offsetByCodePoints() | Retorna o índice dentro da String que é deslocado do índice fornecido. | int |
regionMatches() | Testa se duas regiões de determinada String são iguais. | boolean |
replace() | Pesquisa uma string por um valor especificado e retorna uma nova string. | String |
replaceAll() | Substitui cada substring da String especificada. | String |
replaceFirst() | Substitui a primeira ocorrência de uma substring. | String |
split() | Divide uma String em uma matriz de substrings. | String[] |
startsWith() | Verifica se uma string começa com caracteres especificados no método. | boolean |
subSequence() | Retorna uma nova sequência de caracteres. | CharSequence |
substring() | Retorna uma nova string — que é a substring da string especificada no método. | String |
toCharArray() | Converte a String especificada no método em um novo array de caracteres. | char[] |
toLowerCase() | Converte uma String em letras minúsculas. | String |
toString() | Retorna um valor como um objeto String. | String |
toUpperCase() | Converte uma String em letras maiúsculas. | String |
trim() | Remove espaços em branco das extremidades de uma String especificada no método. | String |
valueOf() | Retorna a representação de String do valor especificado no método. | String |
Não é tão difícil quanto parecia, certo? Vimos, no decorrer de nosso guia, os aspectos principais que cobrem o uso da Classe String, como utilizá-la e, principalmente, como manipulá-la, usando outras classes próximas, como as classes StringBuilder e StringBuffer — ambas complementares em suas funções.
Ainda, pudemos ver as implementações com todas essas classes na prática, além de uma coleção de métodos explicados para você conferir de perto o funcionamento da classe Java String.
Gostou do conteúdo e quer saber ainda mais sobre Java? Acesse nosso guia completo sobre essa linguagem e se prepare para o mercado profissional de desenvolvimento em Java!