Você está na página 1de 15

Programao Estruturada

Aula 07 - Manipulao de Strings

Apresentao
String um texto, ou seja, uma sequncia de caracteres. Existem diversas
funes na linguagem Java para manipular Strings, e esse justamente o tema
desta nossa aula.

Comparao de Strings
Comparaes entre duas Strings no podem ser feitas usar o operador de
igualdade do Java (==), essa no a forma mais recomendada. Isso porque o
operador == deve ser utilizado com tipos primitivos, no com objetos. Voc
estudar em detalhes o conceito de objetos no mdulo de Programao
Orientada a Objetos, mas posso lhe adiantar que a comparao de objetos (neste
caso, Strings) deve ser feita utilizando-se uma funo chamada de equals.

Comparao de Strings

import java.util.Scanner;

O programa apresentado faz uso da


expresso nome1.equals(nome2). A
funo equals recebe como
parmetro uma segunda String, que
justamente com a qual a primeira
String (nome1) ser comparada.
Dessa forma, a funo equals ir
comparar os textos das variveis
nome1 e nome2, retornando true,
caso elas sejam iguais, e falso caso
contrrio.

public class ProgramaEquals {


public static void main(String[] args) {
Scanner leitor = new Scanner(System.in);
System.out.println("Digite o primeiro nome:");
String nome1 = leitor.next();
System.out.println("Digite o segundo nome:");
String nome2 = leitor.next();
if (nome1.equals(nome2)) {
System.out.println("Nomes iguais");
} else {
System.out.println("Nomes diferentes");
}
}
}

Comparao de Strings
Em Java, a comparao de Strings sensvel a letras maisculas e minsculas.
Por exemplo, se voc comparar os textos "Nomes iguais" e "nomes iguais", o
programa ir indicar que os textos digitados so diferentes!

Manipulao de Strings
Quando voc quer comparar Strings considerando que no h distino entre
letras minsculas e maisculas, voc tem algumas opes. A primeira delas
converter os dois textos para letras maisculas antes de compar-los.

Manipulao de Strings

import java.util.Scanner;

public class ProgramaEqualsUpperCase {


public static void main(String[] args) {

Note o uso da funo toUpperCase(). Ela


tambm deve ser aplicada aps o nome de
uma varivel do tipo String e retorna o texto
com todas as suas letras convertidas para
maiscula. Fazendo a converso dos dois
textos para maiscula, podemos usar a
funo equals sem nos preocuparmos com
diferenas entre maisculas ou minsculas
no texto. Poderamos ter transformado as
duas Strings para minsculas acom a
funo toLowerCase().

Scanner leitor = new Scanner(System.in);


System.out.println("Digite o primeiro nome:");
String nome1 = leitor.next();
System.out.println("Digite o segundo nome:");
String nome2 = leitor.next();
nome1 = nome1.toUpperCase();
nome2 = nome2.toUpperCase();
if (nome1.equals(nome2)) {
System.out.println("Nomes iguais");
} else {
System.out.println("Nomes diferentes");
}
System.out.println(nome1);
System.out.println(nome2);
}
}

Manipulao de Strings
public static void main(String[] args) {
Scanner leitor = new Scanner(System.in);

Apesar da soluo de converter para


maiscula e depois compara com a
funo equals funcionar, ele no mostra a
soluo mais indicada, porque os textos
originais so alterados. Para evitar esse
problema, voc pode fazer uso da rotina
equalsIgnoreCase.

System.out.println("Digite o primeiro nome:");


String nome1 = leitor.next();
System.out.println("Digite o segundo nome:");
String nome2 = leitor.next();
if (nome1.equalsIgnoreCase(nome2)) {
System.out.println("Nomes iguais");
} else {
System.out.println("Nomes diferentes");
}
}

Strings como arrays de caracteres


Se voc prestar ateno, ir perceber que uma String pode ser vista como uma
sequncia de caracteres, ou seja, um array de caracteres. De fato, voc pode
transformar uma String em um array de caracteres e vice-versa

Strings como arrays de caracteres


Note o uso da funo toCharArray().
Essa funo aplicada a uma varivel do
tipo String, que no caso nome1, e seu
retorno um array de caracteres com o
tamanho exato do texto e que armazena
exatamente os caracteres que formam o
texto original.

public static void main(String[] args) {


Scanner leitor = new Scanner(System.in);
System.out.println("Digite uma palavra:");
String nome1 = leitor.next();
char[] caracteres = nome1.toCharArray();
System.out.println("Inverso:");
for (int i = caracteres.length - 1; i >= 0 ; i--) {
System.out.print(caracteres[i]);
}
}

Strings como arrays de caracteres


Observe que nessa nova verso do
programa foram utilizadas as funes
length() e charAt() diretamente nas
Strings, sem precisar converter para
array de caracteres. A primeira dessas
funes retorna o tamanho da String. E
nessa contagem, espaos em branco e
caracteres especiais como o \n tambm
contam! J a segunda funo, recebe
como parmetro um nmero inteiro e
retorna o caractere indexado pelo
nmero indicado.

public static void main(String[] args) {


Scanner leitor = new Scanner(System.in);
System.out.println("Digite uma palavra:");
String nome1 = leitor.next();
System.out.println("Inverso:");
for (int i = nome1.length() - 1; i >= 0 ; i--) {
System.out.print(nome1.charAt(i));
}
}

Buscas em Strings
O programa mostrado faz uso da
funo indexOf(), a qual recebe um
caractere como parmetro e retorna
a posio da primeira ocorrncia
desse caractere no texto
representado no exemplo pela
varivel nome1. Caso o caractere
no exista, a funo ir retornar o
valor -1.

public static void main(String[] args) {


Scanner leitor = new Scanner(System.in);
System.out.println("Digite uma palavra:");
String nome1 = leitor.next();
char ponto = '.';
System.out.println("A posio do ponto no texto : "
+ nome1.indexOf(ponto));
}

Buscas em Strings

public static void main(String[] args) {


Scanner leitor = new Scanner(System.in);

Podemos verificar se existe mais de uma


ocorrncia usando variveis como inicio e
posio. A primeira indica a partir de qual
posio devemos buscar o caractere, j a
segunda indica a localizao do ltimo caractere
ponto encontrado. Ela inicializada com o
retorno da funo indexOf(). Depois temos um
lao onde sua condio verifica se o incio
maior ou igual ao tamanho da String (j
percorremos toda a String?) ou se o valor da
varivel posio -1 (o ndice encontrado no
vlido, ento no h mais caractere procurado
na String?). continua...

System.out.println("Digite uma palavra:");


String nome1 = leitor.next();
char ponto = '.';
int inicio = 0;
int posicao = nome1.indexOf(ponto);
System.out.println("Existe ponto nas posies: ");
while (inicio < nome1.length() && posicao != -1) {
System.out.println(posicao);
inicio = posicao + 1;
posicao = nome1.indexOf(ponto, inicio);
}
}

Buscas em Strings

public static void main(String[] args) {


Scanner leitor = new Scanner(System.in);

continuao
Caso a execuo do programa entre no lao, isso
quer dizer que a varivel posio tem um ndice
vlido do caractere procurado. Para encontrar a
posio do prximo caractere, vamos procurar a
partir do ndice da ltima ocorrncia encontrada
mais um (posicao + 1). Por fim, realizamos a
busca usando novamente a funo indexOf(), s
que agora passando como parmetro no s o
caractere procurado, mas tambm a varivel
inicio, indicando a partir de que posio na String
(da esquerda para a direita) a busca deve ser
realizada.

System.out.println("Digite uma palavra:");


String nome1 = leitor.next();
char ponto = '.';
int inicio = 0;
int posicao = nome1.indexOf(ponto);
System.out.println("Existe ponto nas posies: ");
while (inicio < nome1.length() && posicao != -1) {
System.out.println(posicao);
inicio = posicao + 1;
posicao = nome1.indexOf(ponto, inicio);
}
}

Substrings
O programa ao lado faz uso da funo
substring(), a qual retorna um pedao da String
original (ou seja, retorna uma substring) a partir
de dois nmeros. O primeiro deles representa o
ndice de incio do texto. O segundo representa
a posio de fim do texto + 1. Dessa forma,
passar os nmeros 0 e 4 como parmetro indica
que ns queremos o texto formado pelos
caracteres da posio 0 a 3. Note que para
fazer isso, precisamos testar se a String original
possui pelo menos quatro caracteres.

public static void main(String[] args) {


Scanner leitor = new Scanner(System.in);
System.out.println("Digite seu nome completo:");
String nome = leitor.next();
if (nome.length() >=4 &&
nome.substring(0, 4).equalsIgnoreCase("Joo")) {
System.out.println("Ol Joo!");
} else {
System.out.println("Epa, voc no Joo!");
}
}