Java: strings
Conheça as strings em Java, aprenda a consultar o javadoc da classe String e pratique os métodos length, format, charAt, concat, toLowerCase, toUpperCase, equals, equalsIgnoreCase e compareTo.
1. Visão geral
Strings são sequências de caracteres. É comum utilizarmos as expressões "string", "sequência de caracteres" e "cadeia de caracteres" como sinônimos. Em Java, strings são objetos que manipulamos utilizando variáveis de referência. É importante observar que strings são imutáveis.
Neste material, estudaremos sobre algumas das principais características das strings em Java, por meio da resolução de exercícios.
O que você vai aprender
- Como as posições (índices) dos caracteres de uma string são numeradas
- Como encontrar a documentação da classe
Stringno javadoc - Como usar os métodos
length,format,charAt,concat,toLowerCase,toUpperCase,equals,equalsIgnoreCase,compareToecompareToIgnoreCase
O que você vai precisar
- JDK instalado e um IDE ou editor de código
- Conhecer variáveis, entrada e saída com
JOptionPanee estruturas de seleção
2. Posições e o javadoc da classe String
Cada caractere pertencente a uma string possui uma "posição" dentro da string. As posições começam do número zero, como mostra a Figura 2.1. Também é comum chamarmos a posição de um caractere de índice.

Figura 2.1 – A cadeia "Hello, strings" tem comprimento 14; as posições vão de 0 a 13.
É muito importante que o desenvolvedor Java conheça a documentação da plataforma, denominada javadoc. Ela pode ser encontrada no link a seguir.
https://docs.oracle.com/en/java/javase/17/docs/api/index.html
Todas as classes, interfaces, métodos etc. da especificação Java se encontram documentadas nesta página. Isso inclui a própria classe String. Para encontrar a documentação da classe String, clique java.base >> java.lang.
Na página resultante, use CTRL + F no seu navegador e busque por String. Veja a figura a seguir. Clique em String.

Buscando a classe String na documentação do pacote java.lang.
Junto com seu professor, leia trechos da documentação da classe String e vasculhe seu conteúdo, dando especial atenção aos métodos que a classe possui, como
charAtcompareTocontainsequalsequalsIgnoreCaseformatisEmptyindexOflastIndexOflengthrepeatreplacestartsWithsubstringtoLowerCasetoUpperCase
3. Comprimento e formatação
Comprimento de strings: o método length
O Bloco de Código 2.1 mostra como calcular o número de caracteres de uma string.
Strings.java · Bloco de Código 2.1
import javax.swing.JOptionPane;
public class Strings {
public static void main(String[] args) {
// Verificar o comprimento de uma string
String s = JOptionPane.showInputDialog("Digite uma string");
int comprimento = s.length();
JOptionPane.showMessageDialog(null, s + " tem " + comprimento + " caracteres.");
}
}
Formatação de strings: o método format
Concatenar strings utilizando o operador + é ineficiente computacionalmente e seu uso tende a comprometer a legibilidade do código. O método format da classe String pode auxiliar. A ideia é a seguinte:
- Especificamos um "template" que contém as partes "fixas" da string que desejamos
- O template possui códigos de formatação que serão substituídos por valores de interesse
- Especificamos quais valores serão utilizados como substitutos dos códigos de formatação, o que ocorre de acordo com a ordem.
- Cada tipo tem um código de formatação apropriado.
A Tabela 2.1 mostra alguns dos principais códigos de formatação associados a seus respectivos tipos.
Tabela 2.1
| Tipo | Código de formatação |
|---|---|
| String | %s |
| double | %f |
| int | %d |
| char | %c |
A Figura 2.2 ilustra a forma como a substituição de códigos de formatação pelos valores acontece.

Figura 2.2 – Cada código de formatação é substituído, na ordem, pelo valor correspondente.
O Bloco de Código 2.2 mostra um exemplo de uso do método format.
Strings.java · Bloco de Código 2.2
import javax.swing.JOptionPane;
public class Strings {
public static void main(String[] args) {
String nome = JOptionPane.showInputDialog("Qual o seu nome?");
int idade = Integer.parseInt(JOptionPane.showInputDialog("Quantos anos você tem?"));
//concatenando com o operador +
JOptionPane.showMessageDialog(null, "Oi, " + nome + ". Você tem " + idade + " anos.");
//"montando a string com o método format"
String s = String.format("Oi, %s. Você tem %d anos.", nome, idade);
JOptionPane.showMessageDialog(null, s);
}
}
4. charAt, concat e conversão de caixa
Caractere na posição especificada: o método charAt
Podemos descobrir qual caractere se encontra numa determinada posição de uma string utilizando o método charAt, como mostra o Bloco de Código 2.3.
Strings.java · Bloco de Código 2.3
import javax.swing.JOptionPane;
public class Strings {
public static void main(String[] args) {
String teste = "Hello, strings";
int posicao = Integer.parseInt(JOptionPane.showInputDialog("Digite a posição desejada"));
String resultado = String.format("O caractere na posição %d é o %c.", posicao, teste.charAt(posicao));
JOptionPane.showMessageDialog(null, resultado);
}
}
Concatenação de strings: o método concat
Assim como o operador +, o método concat pode ser utilizado para concatenar strings, como mostra o Bloco de Código 2.4.
Strings.java · Bloco de Código 2.4
import javax.swing.JOptionPane;
public class Strings {
public static void main(String[] args) {
String nome = JOptionPane.showInputDialog("Qual o seu nome?");
String sobrenome = JOptionPane.showInputDialog("Qual o seu sobrenome?");
String resultado = nome.concat(" ").concat(sobrenome);
JOptionPane.showMessageDialog(null, resultado);
}
}
Conversão para caixa baixa e alta: os métodos toLowerCase e toUpperCase
O Bloco de Código 2.5 mostra como podemos converter uma string para que seja composta apenas de letras minúsculas ou maiúsculas.
Strings.java · Bloco de Código 2.5
import javax.swing.JOptionPane;
public class Strings {
public static void main(String[] args) {
String teste = "HeLLo, WoooOrlllD";
String minusculas = teste.toLowerCase();
String maiusculas = teste.toUpperCase();
JOptionPane.showMessageDialog(null, String.format("Maiúsculas: %s \n Minúsculas: %s", maiusculas, minusculas));
}
}
5. Comparando strings
Comparação por igualdade: os métodos equals e equalsIgnoreCase
Strings podem ser comparadas por igualdade de diferentes formas. Se a necessidade é verificar se duas strings são iguais diferenciando maiúsculas de minúsculas, usamos o método equals. Se a caixa não importar, usamos o método equalsIgnoreCase. Veja o Bloco de Código 2.6.
Strings.java · Bloco de Código 2.6
import javax.swing.JOptionPane;
public class Strings {
public static void main(String[] args) {
String s1 = JOptionPane.showInputDialog("Qual a primeira string?");
String s2 = JOptionPane.showInputDialog("Qual a segunda string?");
//comparação considerando maiúsculas e minúsculas: s é diferente de S
if (s1.equals(s2)) {
JOptionPane.showMessageDialog(null, "Considerando a caixa, as strings são iguais");
}
else {
JOptionPane.showMessageDialog(null, "Considerando a caixa, as strings são diferentes");
}
//comparação considerando maiúsculas e minúsculas: s é igual a S
if (s1.equalsIgnoreCase(s2)) {
JOptionPane.showMessageDialog(null, "Desconsiderando a caixa, as strings são iguais");
}
else {
JOptionPane.showMessageDialog(null, "Desconsiderando a caixa, as strings são diferentes");
}
}
}
Comparação lexicográfica: quem aparece primeiro no dicionário? O método compareTo
Com duas strings em mãos, podemos verificar qual delas aparece primeiro no dicionário. Isso pode ser feito utilizando-se o método compareTo. Se as duas strings são referenciadas por variáveis chamadas s1 e s2, seu uso fica assim:
s1.compareTo(s2);
O método compareTo produz um número inteiro. Se s1 aparece antes de s2 no dicionário, ele é negativo. Se s2 aparece antes de s1 no dicionário, ele é positivo. Se as strings são iguais, o valor produzido por compareTo é igual a zero. Veja o Bloco de Código 2.7.
Strings.java · Bloco de Código 2.7
import javax.swing.JOptionPane;
public class Strings {
public static void main(String[] args) {
String s1 = JOptionPane.showInputDialog("Qual a primeira string?");
String s2 = JOptionPane.showInputDialog("Qual a segunda string?");
//considerando caixa alta e baixa
int resultado = s1.compareTo(s2);
if (resultado < 0) {
JOptionPane.showMessageDialog(null, s1 + " vem antes de " + s2 + " no dicionário");
}
else if (resultado > 0) {
JOptionPane.showMessageDialog(null, s2 + " vem antes de " + s1 + " no dicionário");
}
else {
JOptionPane.showMessageDialog(null, s2 + " e " + s1 + " são iguais");
}
//desconsiderando caixa alta e baixa
resultado = s1.compareToIgnoreCase(s2);
if (resultado < 0) {
JOptionPane.showMessageDialog(null, s1 + " vem antes de " + s2 + " no dicionário");
}
else if (resultado > 0) {
JOptionPane.showMessageDialog(null, s2 + " vem antes de " + s1 + " no dicionário");
}
else {
JOptionPane.showMessageDialog(null, s2 + " e " + s1 + " são iguais");
}
}
}
6. Exercícios
Ler uma única string que contém nome e sobrenome de uma pessoa. Exemplo: "João Silva". Para este exemplo, o programa deve exibir: "Olá, João. Seu sobrenome é Silva".
Ler uma string e verificar se ela representa uma senha válida. Para tal, ela deve ter as seguintes características:
- comprimento igual a 4
- primeiro símbolo igual a A ou a
- conter pelo menos um número ímpar
Escreva um programa que
- lê uma string s
- lê dois inteiros a e b
- exibe a substring que começa na posição a e termina na posição b, incluindo a posição b.
Exemplo: s = Hello World, a = 2, b = 4. Resultado: llo.
Escreva um programa que lê uma string composta por duas palavras separadas por um espaço em branco. Seu programa deve exibir o comprimento de cada palavra.
7. Encerramento
Você viu que strings são objetos imutáveis cujos caracteres têm posições a partir de zero, aprendeu a navegar pelo javadoc da classe String e usou alguns de seus principais métodos para medir, formatar, acessar, concatenar, converter e comparar strings.
Próximos passos
- Explore no javadoc os demais métodos listados (
contains,indexOf,substring,replaceetc.) - Siga para o codelab de estruturas de repetição