Buscar

Manipulação de Strings em Java

Prévia do material em texto

Programação I
Aulas 7
Prof. Jane Alvarez
Professora : Jane2
Strings
 Java não possui um tipo primitivo string como em algumas outras linguagens 
(VB, Delphi).
 A biblioteca de classes do Java possui uma classe pré-definida chamada 
String, que está no pacote java.lang .
 Logo, em Java, strings não são tipos primitivos e sim objetos.
 A declaração de um objeto String segue o mesmo padrão de declaração das 
variáveis de tipos básicos:
String mensagem; 
String nome = "Joao da Silva";
String saudacao = "Olá " + nome;
String vazia = "";
 Entretanto, por ser um objeto não precisaríamos do operador new e de um 
construtor ?
A concatenação de strings 
é feita com o operador +
Professora : Jane3
Strings
 Na realidade, por ser muito usado, o Java simplifica a chamada do construtor 
da classe String.
 Exemplo:
String str = "abc";
é equivalente a: 
char[] data = { 'a', 'b', 'c' };
String str = new String(data);
"abc"
Professora : Jane4
Strings
 A classe String possui mais de 60 métodos para manipulação de strings.
 Alguns dos métodos mais usados são definidos a seguir:
Professora : Jane5
Strings
Método Descrição
char charAt(int n) Retorna o caracter na n-ésima posição (começa a partir do ZERO)
int compareTo(String outra) Compara a string com outra. Retorna –1, 0 ou 1 caso a string seja menor, igual ou 
maior que a outra, respectivamente
boolean endsWith(String sufixo) Verifica se a string termina com o sufixo
boolean equals(String outra) Compara a string com o objeto (case-sensitive)
boolean equalsIgnoreCase(String outra) Compara a string com o objeto ignorando maiúsculas e minúsculas
int indexOf(char ch) Retorna a primeira ocorrência de ch na string ou -1 se não existir
int length() Retorna o tamanho da string em caracteres
String replace(char velho, char novo) Substitui todas as ocorrências do caracter velho pelo novo
Boolean startsWith(String prefixo) Verifica se a string inicia com o prefixo
String substring(int inicio, int fim) Retorna a substring da posição inicio até fim-1
String toLowerCase() Retorna a string convertida para letras minúsculas
String toUpperCase() Retorna a string convertida para letras maiúsculas
String trim() Retira os espaços em branco no início e no fim da string
Professora : Jane6
Strings
 String, em Java, são imutáveis.
 Isso significa dizer que, uma vez criadas, não podemos alterar o conteúdo de 
uma string.
 Quando usamos um método que "altera" a string, na realidade estamos 
gerando uma cópia alterada da string.
 Exemplo:
String disciplina = "Linguagem de Programação II";
String maiuscula = disciplina.toUpperCase();
String inicio = disciplina.substring(0, 9);
String outra = maiuscula.replace(' ', '-');
"Linguagem de Programação II"
"LINGUAGEM DE PROGRAMAÇÃO II"
"Linguagem"
"LINGUAGEM-DE-PROGRAMAÇÃO-II"
Professora : Jane7
Strings
 Outro exemplo:
String disciplina = "Linguagem";
disciplina = disciplina + " de ";
disciplina = disciplina + "Programação";
disciplina = disciplina + " II";
"Linguagem"
Professora : Jane8
Strings
 Outro exemplo:
String disciplina = "Linguagem";
disciplina = disciplina + " de ";
disciplina = disciplina + "Programação";
disciplina = disciplina + " II";
"Linguagem"
"Linguagem de"
Professora : Jane9
Strings
 Outro exemplo:
String disciplina = "Linguagem";
disciplina = disciplina + " de ";
disciplina = disciplina + "Programação";
disciplina = disciplina + " II";
"Linguagem"
"Linguagem de "
"Linguagem de Programação"
Professora : Jane10
Strings
 Outro exemplo:
String disciplina = "Linguagem";
disciplina = disciplina + " de ";
disciplina = disciplina + "Programação";
disciplina = disciplina + " II";
 Ou seja, se alteramos com muita frequência uma string, temos uma perda de 
desempenho relacionada à cópia dessa string para um novo objeto. E quanto 
maior a string, pior o desempenho.
 Por isso, para programas que trabalham intensamente com strings existe a 
classe StringBuilder, que foge do escopo da nossa disciplina.
"Linguagem"
"Linguagem de "
"Linguagem de Programação"
"Linguagem de Programação II"
O Java irá descartar 
automaticamente 
esses objetos 
quando necessário.
Professora : Jane11
Strings
 Um detalhe muito importante da manipulação de strings é em relação à 
comparação de strings.
 Como strings são objetos, se usarmos os operadores relacionais (==, !=, >, <, 
>= ou <=) estaremos comparando as referências para as strings e não o 
conteúdo das strings.
 Para realizar a comparação do conteúdo devemos usar os métodos:
equals()
equalsIgnoreCase()
compareTo()
compareToIgnoreCase()
Professora : Jane12
Strings
 Exemplo 1:
Scanner t = new Scanner(System.in);
String nome1 = t.nextLine();
String nome2 = t.nextLine();
String nome3 = nome1;
if (nome1 == nome2)
System.out.println("Igual");
else
System.out.println("Diferente");
"Joao"
"Joao"
Quando comparamos 
nome1 == nome2
estamos comparando se a área de 
memória referenciada é a mesma e 
não se o conteúdo é o mesmo.
Nesse caso vai imprimir "Diferente"
nome1
nome3
nome2
nome1 == nome3
nome1 != nome2
Professora : Jane13
Strings
 Exemplo 2:
Scanner t = new Scanner(System.in);
String nome1 = t.nextLine();
String nome2 = t.nextLine();
String nome3 = nome1;
if (nome1.equals(nome2))
System.out.println("Igual");
else
System.out.println("Diferente");
Com o método equals() estamos 
comparando os conteúdos. 
Nesse caso vai imprimir "Igual"
"Joao"
"Joao"
nome1
nome3
nome2
nome1 == nome3
nome1 != nome2
Professora : Jane14
Strings
 Exemplo 3:
Scanner t = new Scanner(System.in);
String nome1 = t.nextLine();
String nome2 = t.nextLine();
String nome3 = nome1;
if (nome1.compareTo(nome2) == 0)
System.out.println("Igual");
else
System.out.println("Diferente");
O método compareTo() retorna:
• um valor < 0 se nome1 < nome2 
• um valor > 0 se nome1 > nome2
• um valor = 0 se nome1 = nome2
A comparação é feita usando a ordem 
do dicionário.
"Joao"
"Joao"
nome1
nome3
nome2
nome1 == nome3
nome1 != nome2
Professora : Jane15
Strings
 Exemplos de resultados de s1.compareTo(s2):
S1 S2 Resultado Descrição
"a" "b" < 0 "a" < "b"
"A" "a" < 0 "A" < "a"
Letras maiúsculas vem ANTES de letras minúsculas
"JOAO" "joao" < 0 "JOAO" < "joao"
Letras maiúsculas vem ANTES de letras minúsculas
"joao" "ana" > 0 "joao" > "ana"
"joao" "Pedro" > 0 "joao" > "Pedro"
P maiúsculo vem ANTES do j minúsculo
"123" "joao" < 0 "123" < "joao"
Dígitos vem ANTES de letras maiúsculas ou 
minúsculas
"11" "2" < 0 "11" < "2"
A comparação é feita como string e não como 
número
Professora : Jane16
Strings
 Também é possível usar literais nas comparações de strings:
Scanner t = new Scanner(System.in);
String nome1 = t.nextLine();
String nome2 = t.nextLine();
String nome3 = nome1;
if (nome1.compareTo("Jose") < 0)
System.out.println(nome1 + " vem antes de Jose");
else if (nome1.compareTo("Jose") > 0)
System.out.println(nome1 + " vem depois de Jose");
if (nome2.equalsIgnoreCase("JOAO"))
System.out.println("Igual");
else
System.out.println("Diferente");
Professora : Jane17
Exercício:
 Exercício 1 : Acrescente código ao Projeto TestaVetorEmpregado para 
trabalhar com letras maiúsculas. Para isso, use adequadamente, o 
método toUpperCase.

Continue navegando