Principais Operações com Strings
Concatenação de Strings
A forma mais direta de unir strings é através do operador de concatenação +
.
String str1 = "Java";
String str2 = "Hello";
String str3 = str2 + " " + str1;
System.out.println(str3); // Exibe: Hello Java
Se um tipo de dado que não é uma string, como um número, for incluído na operação, Java o converterá automaticamente para sua representação em string. Essencialmente, o compilador utiliza o método String.valueOf()
para realizar essa conversão. Para objetos, o método toString()
é invocado.
String str3 = "Ano " + 2025; // O inteiro 2025 é convertido para a string "2025"
Uma alternativa é o método concat()
, que anexa uma string ao final de outra, retornando um novo objeto String
com o resultado.
String str1 = "Java";
String str2 = "Hello";
str2 = str2.concat(str1); // str2 agora contém "HelloJava"
Notavelmente, o método estático String.join()
oferece uma maneira elegante de unir múltiplas strings usando um delimitador comum. O primeiro argumento é o delimitador, e os demais são as strings a serem unidas. Esta abordagem é frequentemente preferível por sua legibilidade, especialmente ao lidar com várias strings.
String str1 = "Java";
String str2 = "Hello";
String str3 = String.join(" ", str2, str1); // str3 contém "Hello Java"
Extração de Caracteres e Substrings
Para obter um caractere específico de uma string, utiliza-se o método charAt(int index)
. Ele recebe um índice (baseado em zero) e retorna o char
naquela posição.
String str = "Java";
char c = str.charAt(2);
System.out.println(c); // Exibe 'v'
Para extrair uma sequência de caracteres char
para um array existente, pode-se usar o método getChars()
. Seus parâmetros definem:
- o índice inicial e final (não incluso) na string de origem
- o array de destino
- o índice onde a inserção deve começar nesse array
String str = "Hello world!";
int start = 6;
int end = 11;
// Cria um array de tamanho adequado (5 neste caso)
char[] dst = new char[end - start];
// Copia os caracteres de 'str' do índice 6 ao 10 (5 caracteres) para 'dst' a partir do índice 0
str.getChars(start, end, dst, 0);
// dst agora contém os caracteres 'w', 'o', 'r', 'l', 'd'
System.out.println(dst); // Exibe: world
Comparação de Strings
A comparação de conteúdo entre strings deve ser feita com os métodos equals()
(que diferencia maiúsculas e minúsculas) e equalsIgnoreCase()
(que as ignora). É fundamental não usar o operador ==
para essa finalidade, pois ==
compara as referências de memória dos objetos, ou seja, verifica se duas variáveis apontam para o mesmo objeto, e não se seus conteúdos são idênticos.
String str1 = "Hello";
String str2 = "hello";
System.out.println(str1.equals(str2)); // Retorna false
System.out.println(str1.equalsIgnoreCase(str2)); // Retorna true
Para cenários mais específicos, o método regionMatches()
compara partes (substrings) de duas strings, sendo útil para verificar se segmentos específicos coincidem.
Os métodos compareTo()
e compareToIgnoreCase()
também comparam strings, mas retornam um valor inteiro que indica sua ordem lexicográfica (alfabética).
- Valor < 0: a primeira string vem antes da segunda.
- Valor > 0: a primeira string vem depois da segunda.
- Valor 0: as strings são equivalentes.
String str1 = "hello";
String str2 = "world";
String str3 = "hell";
System.out.println(str1.compareTo(str2)); // Retorna -15 (um valor negativo)
System.out.println(str1.compareTo(str3)); // Retorna 1 (um valor positivo)
Busca em Strings
Para localizar ocorrências, indexOf()
retorna o índice da primeira aparição de um caractere ou substring, enquanto lastIndexOf()
retorna o da última. Se não encontrado, ambos retornam -1
.
String str = "Hello world";
int index1 = str.indexOf('l'); // Retorna 2
int index2 = str.indexOf("wo"); // Retorna 6
int index3 = str.lastIndexOf('l'); // Retorna 9
int index4 = str.lastIndexOf("gg"); // Retorna -1
Os métodos startsWith()
e endsWith()
são booleanos e verificam se uma string começa ou termina com um determinado prefixo ou sufixo.
String str = "myfile.exe";
boolean start = str.startsWith("my"); // Retorna true
boolean end = str.endsWith("exe"); // Retorna true
Métodos de Transformação de Strings
Como strings são imutáveis, os métodos a seguir não alteram a string original; eles sempre retornam uma nova string com a transformação aplicada.
replace()
: Retorna uma nova string com todas as ocorrências de um caractere ou substring substituídas.String str = "Hello world"; String replStr = str.replace("l", "z"); // Retorna "Hezzo worzd"
trim()
: Retorna uma nova string sem os espaços em branco (whitespace
) no início e no final.String str = " hello world "; str = str.trim(); // str agora contém "hello world"
substring()
: Extrai uma parte da string. Com um argumento, extrai do índice até o final. Com dois, extrai do índice inicial até o índice final, sem incluir o caractere na posição final.String str = "Hello world"; String substr1 = str.substring(6); // Retorna "world" String substr2 = str.substring(3, 5); // Retorna "lo"
toLowerCase()
/toUpperCase()
: Retornam uma nova string com todos os caracteres convertidos para minúsculas ou maiúsculas, respectivamente.String str = "Hello World"; System.out.println(str.toLowerCase()); // exibe: hello world System.out.println(str.toUpperCase()); // exibe: HELLO WORLD
Divisão de Strings (Split)
O método split()
divide uma string em um array (String[]
) com base em um delimitador. O delimitador em si é removido e não aparece nos resultados.
String text = "FIFA will never regret it";
String[] words = text.split(" ");
for(String word : words) {
System.out.println(word);
}
A execução do código acima exibirá cada palavra em uma nova linha. Excelente! Aqui estão três novas tarefas práticas, elaboradas com base nos seus requisitos e no conteúdo do artigo.
📝 Exercícios
Perfeito! Adaptar as tarefas para que o usuário complete um método específico é uma excelente prática para ensinar a modularização do código.
Aqui estão as três tarefas reescritas no formato solicitado.
Tarefa 1: Formatar um Nome (Capitalização)
Objetivo: Complete o método formatarNome
para que ele receba uma string com um nome e a retorne formatada, com apenas a primeira letra maiúscula e o restante em minúsculas.
Código inicial:
public class Main {
public static void main(String[] args) {
String nome = "jAVa";
String nomeFormatado = formatarNome(nome);
System.out.println(nomeFormatado); // O resultado esperado é "Java"
}
static String formatarNome(String nome) {
// Escreva seu código aqui.
// Você precisa retornar uma nova string formatada.
}
}
Resposta
public class Main {
public static void main(String[] args) {
String nome = "jAVa";
String nomeFormatado = formatarNome(nome);
System.out.println(nomeFormatado);
}
static String formatarNome(String nome) {
if (nome == null || nome.isEmpty()) {
return nome; // Retorna a string original se for nula ou vazia
}
String primeiraLetra = nome.substring(0, 1).toUpperCase();
String restoDoNome = nome.substring(1).toLowerCase();
return primeiraLetra + restoDoNome;
}
}
formatarNome
primeiro extrai a primeira letra (substring(0, 1)
) e a converte para maiúscula (toUpperCase()
). Em seguida, extrai o restante da string (substring(1)
) e converte para minúsculas (toLowerCase()
). Finalmente, concatena as duas partes e retorna o resultado. A verificação inicial (if
) garante que o código não falhe caso receba uma string nula ou vazia.
Tarefa 2: Extrair um Valor Numérico
Objetivo: Complete o método extrairValorNumerico
para que ele remova o símbolo de moeda ($
) do início da string de preço e retorne apenas a parte numérica.
Código inicial:
public class Main {
public static void main(String[] args) {
String preco = "$120.50";
String valorNumerico = extrairValorNumerico(preco);
System.out.println(valorNumerico); // O resultado esperado é "120.50"
}
static String extrairValorNumerico(String preco) {
// Escreva seu código aqui.
// Você precisa retornar a string sem o primeiro caractere.
}
}
Resposta
public class Main {
public static void main(String[] args) {
String preco = "$120.50";
String valorNumerico = extrairValorNumerico(preco);
System.out.println(valorNumerico);
}
static String extrairValorNumerico(String preco) {
if (preco == null || !preco.startsWith("$")) {
return preco; // Retorna a string original se for inválida
}
return preco.substring(1);
}
}
substring(1)
cria e retorna uma nova string que é uma "fatia" da original, começando a partir do caractere no índice 1 (o segundo caractere) e indo até o final. Isso efetivamente ignora o caractere no índice 0, que é o símbolo $
.
Tarefa 3: Obter um Valor de Dados Estruturados
Objetivo: Complete o método extrairValor
para que ele receba uma string no formato "chave:valor"
e retorne apenas a parte do valor.
Código inicial:
public class Main {
public static void main(String[] args) {
String dados = "produto:Teclado";
String valor = extrairValor(dados);
System.out.println(valor); // O resultado esperado é "Teclado"
}
static String extrairValor(String dados) {
// Escreva seu código aqui.
// Você precisa dividir a string e retornar a segunda parte.
}
}
Resposta
public class Main {
public static void main(String[] args) {
String dados = "produto:Teclado";
String valor = extrairValor(dados);
System.out.println(valor);
}
static String extrairValor(String dados) {
String[] partes = dados.split(":");
if (partes.length > 1) {
return partes[1];
}
return null; // ou retorna uma string vazia, dependendo do requisito
}
}
split(":")
divide a string dados
em um array de strings usando o caractere :
como delimitador. O array resultante, partes
, conterá {"produto", "Teclado"}
. A linha return partes[1]
acessa e retorna o segundo elemento desse array (o de índice 1), que corresponde ao valor desejado. A verificação if
garante que o programa não quebre se a string de entrada não contiver o delimitador.