Introdução à Classe String em Java
Uma string representa uma sequência de caracteres. Para a manipulação de strings em Java, a linguagem oferece a classe String
, que disponibiliza um conjunto de métodos para essa finalidade. Tecnicamente, um objeto String
funciona como uma referência a uma área na memória onde a sequência de caracteres está armazenada.
Para instanciar uma nova string, é possível tanto usar um dos construtores da classe String
quanto atribuir diretamente um literal de string (um valor entre aspas duplas):
public static void main(String[] args) {
String str1 = "Java";
String str2 = new String(); // Cria uma string vazia
String str3 = new String(new char[] {'h', 'e', 'l', 'l', 'o'}); // Cria a partir de um array de caracteres
String str4 = new String(new char[]{'w', 'e', 'l', 'c', 'o', 'm', 'e'}, 3, 4); // Onde 3 é o índice inicial e 4 é o número de caracteres
System.out.println(str1); // Exibe: Java
System.out.println(str2); // Exibe uma linha em branco
System.out.println(str3); // Exibe: hello
System.out.println(str4); // Exibe: come
}
Ao lidar com strings, é fundamental compreender que objetos da classe String
são imutáveis (immutable). Isso significa que qualquer operação que aparentemente modifica uma string, na verdade, cria um novo objeto String
em memória com o resultado da alteração.
Considerando que uma string é uma sequência de caracteres, o método length()
pode ser aplicado para obter a sua quantidade de caracteres:
String str1 = "Java";
System.out.println(str1.length()); // Retorna 4
De forma inversa, o método toCharArray()
permite converter uma string de volta para um array de caracteres:
String str1 = new String(new char[] {'h', 'e', 'l', 'l', 'o'});
char[] helloArray = str1.toCharArray();
Strings Vazias e Nulas
Uma string pode estar vazia, o que significa que ela existe como objeto, mas não contém caracteres. O comprimento de uma string vazia, retornado pelo método length()
, é 0. A forma mais comum de verificar se uma string está vazia é com o método isEmpty()
, que retorna true
nesse caso.
String s = ""; // String vazia
if (s.isEmpty()) System.out.println("A string está vazia");
Por outro lado, uma variável String
pode ter o valor null
, indicando que ela não aponta para objeto algum.
String s = null; // A variável não referencia um objeto
if (s == null) System.out.println("A string é nula");
É crucial não confundir uma string nula com uma vazia. Tentar invocar qualquer método em uma variável nula, como length()
ou isEmpty()
, resultará em um NullPointerException
em tempo de execução.
String s = null; // A variável não referencia um objeto
// A linha abaixo causará um erro em tempo de execução (NullPointerException)
if (s.isEmpty()) System.out.println("String is empty"); // ! Erro
Para evitar essa falha, é uma boa prática verificar se a variável é nula antes de tentar usar seus métodos. Frequentemente, a verificação é feita para ambas as condições: nula ou vazia.
String s = null; // A variável não referencia um objeto
if (s == null || s.isEmpty()) System.out.println("A string é nula ou está vazia");
Principais Métodos da Classe String
As operações mais comuns com strings são realizadas através dos métodos da classe String
. Abaixo estão alguns dos mais importantes:
concat()
: Concatena uma string ao final de outra.valueOf()
: Converte diferentes tipos de dados (como números) para sua representação em string.join()
: Une várias strings em uma só, usando um delimitador especificado.compareTo()
: Compara duas strings lexicograficamente (ordem de dicionário).charAt()
: Retorna o caractere (char
) em um índice específico da string.getChars()
: Copia uma sequência de caracteres da string para um array de destino.equals()
: Compara o conteúdo de duas strings. A comparação diferencia maiúsculas de minúsculas.equalsIgnoreCase()
: Compara o conteúdo de duas strings, ignorando as diferenças entre maiúsculas e minúsculas.regionMatches()
: Compara uma região (substring) de uma string com uma região de outra.indexOf()
: Retorna o índice da primeira ocorrência de um caractere ou substring.lastIndexOf()
: Retorna o índice da última ocorrência de um caractere ou substring.startsWith()
: Verifica se a string começa com um determinado prefixo (substring).endsWith()
: Verifica se a string termina com um determinado sufixo (substring).replace()
: Substitui todas as ocorrências de um caractere ou substring por outro.trim()
: Remove todos os espaços em branco no início e no fim da string.substring()
: Extrai uma nova string a partir de um índice inicial até o final ou até um índice final especificado.toLowerCase()
: Converte todos os caracteres da string para minúsculas.toUpperCase()
: Converte todos os caracteres da string para maiúsculas.
O funcionamento detalhado desses métodos será explorado a seguir.
📝 Exercícios
Tarefa 1
Qual será o resultado da execução do seguinte trecho de código?
String s = null;
if(s.isEmpty()) {
System.out.println("A string está vazia");
} else {
System.out.println("A string não está vazia");
}
Alternativas:
A string está vazia
A string não está vazia
- O código não irá compilar
- Ocorrerá um
NullPointerException
em tempo de execução - Ocorrerá um
ArrayIndexOutOfBoundsException
Resposta
NullPointerException
em tempo de execução.
null
não aponta para nenhum objeto na memória. O código tenta chamar o método isEmpty()
em uma referência nula (s
). Isso é uma operação ilegal em Java, pois não há um objeto String para executar o método, resultando em um NullPointerException
. É fundamental diferenciar uma string nula de uma string vazia (""
), na qual a chamada de métodos é permitida.
Tarefa 2
Qual string será exibida pelo código a seguir?
char[] caracteres = {'p', 'r', 'o', 'g', 'r', 'a', 'm', 'a', 'n', 'd', 'o'};
String s1 = new String(caracteres, 0, 8);
String s2 = " Java";
String resultado = s1.concat(s2);
System.out.println(resultado);
Alternativas:
programan Java
programando Java
programa Java
- Ocorrerá um erro de compilação
programandoJava
Resposta
programa Java
.
String s1 = new String(caracteres, 0, 8);
: Esta linha usa um dos construtores da classe String mencionados no artigo. Ele cria uma nova string a partir do array caracteres, começando no índice 0 e usando 8 caracteres. Portanto, s1
se torna "programa"
.String s2 = " Java";
: A variável s2
é inicializada com o literal " Java"
.String resultado = s1.concat(s2);
: O método concat()
une a string s2
ao final da string s1
. A operação "programa".concat(" Java")
resulta na string "programa Java"
.