Buscar

Material Didático AO03 – Cadeias de Caracteres e Registros

Prévia do material em texto

1 
 
CADEIAS DE CARACTERES E REGISTROS 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
LÓGICA DE 
PROGRAMAÇÃO II 
 
Este material didático 
contempla os 
conteúdos de Cadeias 
de Caracteres e 
Registros, 
apresentando uma 
breve definição da 
manipulação de 
strings e registros, 
com exemplos 
desenvolvidos 
utilizando a linguagem 
Java. 
 
Créditos 
Coordenação do Curso de Licenciatura em Computação 
Pollyana dos Reis Pereira Fanstone 
Autora 
Noeli Antônia Pimentel Vaz 
Capa 
Jaqueline Vasconcelos Braga 
Revisão 
Hellen Corrêa da Silva 
 
 
 
2 
 
1. Cadeias de Caracteres 
É comum, na tarefa de programação, encontrar problemas que envolvam o uso de caracteres e 
palavras. A maioria das linguagens de programação possuem funções, bibliotecas e classes 
específicas para a manipulação de cadeias de caracteres, também chamadas de Strings. 
As cadeias de caracteres em Java podem ser armazenadas em objetos da classe String e da 
classe StringBuffer. As cadeias de caracteres devem estar entre aspas, enquanto os caracteres 
devem estar entre aspas simples. 
São Exemplos de caracteres e Strings constantes (valores fixos): 
‘A’ 
“Programação” 
 
A manipulação de cadeias de caracteres na linguagem Java, utiliza o pacote de classes java.lang. 
Alguns métodos das classes deste pacote são descritos a seguir. Este pacote de classes contém 
funcionalidades básicas da Linguagem Java e, por isso, dispensa o uso do import. 
Exemplos de variáveis que manipulam cadeias de caracteres: 
String nome; A variável nome poderá armazenar cadeias de caracteres. 
char letra; A variável letra poderá armazenar um único caractere. 
StringBuffer texto; A variável texto poderá armazenar uma cadeia de caracteres que, 
inicialmente, tem tamanho 16, expansível de acordo com a necessidade. 
 
É importante lembrar que variáveis String são armazenadas na memória do computador como um 
vetor de caracteres. Algumas funções para manipulação das strings consideram também, que a 
posição do caractere inicial dentro da string é 0. 
 
1.1 Inicializando Cadeias de Caracteres 
As variáveis que armazenam cadeias de caracteres podem ser inicializadas automaticamente pelo 
programa ou podem receber um valor por meio do teclado. 
a) Inicialização no momento da declaração 
 
String texto1 = new String(); 
 
No exemplo, a variável texto1 foi inicializada com seu conteúdo vazio. 
 
 
3 
 
String texto2 = new String(“PROGRAMA”); 
 
No exemplo, a variável texto2 foi inicializada e seu conteúdo será a cadeia de caracteres 
PROGRAMA. Uma cadeia de caracteres é sempre envolvido por aspas duplas. 
 
char texto[] = {‘c’,’o’,’m’,’p’,’u’,’t’,’a’,’d’,’o’,’r’}; 
String texto3 = new String(texto); 
 
No exemplo, a variável texto recebeu as letras separadamente. Por isso, cada uma das letras 
estava acompanhada por aspas simples. Em seguida, a variável texto3 foi inicializada e seu 
conteúdo será o conjunto de caracteres computador. 
 
StringBuffer texto4 = new StringBuffer(); 
 
No exemplo, a variável texto4 foi inicializada e seu conteúdo será vazio. 
 
b) Inicialização por meio da atribuição (depois da declaração) 
 
String texto1 = new String(); 
texto1 = “virtual”; 
 
String texto2 = new String(); 
String texto3 = new String(“programa”); 
texto2 = texto3; 
 
No primeiro caso, a variável texto1 recebe um valor constate, a cadeia de caracteres virtual. 
No segundo caso, a variável texto2 terá o mesmo conteúdo de texto3, ou seja, programa. 
 
c) Inicialização por meio do teclado 
 
 
 Na linha 9 do código acima, foi utilizado o método next() (entrada.next()) para realizar 
a leitura de uma palavra. Veja que, durante a execução da linha 9 não é possível adicionar 
mais que uma palavra à variável, visto que o método next() interpreta o espaço como fim da 
string lida. Para permitir a leitura de frases em variáveis do tipo String, existe o comando 
nextLine(), que também é usado após uma variável Scanner. Todos os exemplos seguintes 
utilizarm o método nextLine() para leitura de variáveis do tipo String. 
 
 
 
 
4 
 
1.2 Descobrindo a quantidade de caracteres 
O método length() retorna um valor inteiro que corresponde ao número de caracteres da cadeia. O 
método é usado após uma variável do tipo String e retorna um valor inteiro, como mostrado abaixo: 
 
 
1.3 Convertendo caracteres da String para Maiúsculo 
O método toUpperCase converte todos os caracteres da cadeia para maiúsculo. 
 1 import java.util.Scanner; 
 2 
 3 public class ExemploString{ 
 4 public static void main(String args[]){ 
 5 String cadeia = new String(); 
 6 Scanner entrada; 
 7 entrada = new Scanner(System.in); 
 8 System.out.println("Digite uma palavra: "); 
 9 cadeia = entrada.nextLine(); 
10 cadeia = cadeia.toUpperCase(); 
11 System.out.println("String convertida para maiusculo: "+cadeia); 
12 } 
13 } 
Observe que é necessário atribuir à string o resultado produzido pelo método toUpperCase, pois se 
ele for somente utilizado, produz o resultado porém não modifica a string. 
1.4 Convertendo caracteres da String para Minúsculo 
O método toLowerCase converte todos os caracteres da cadeia para minúsculo. 
 1 import java.util.Scanner; 
 2 
 3 public class ExemploString{ 
 4 public static void main(String args[]){ 
 5 String cadeia = new String(); 
 6 Scanner entrada; 
 7 entrada = new Scanner(System.in); 
 8 System.out.println("Digite uma palavra: "); 
 
5 
 
 9 cadeia = entrada.nextLine(); 
10 cadeia = cadeia.toLowerCase(); 
11 System.out.println("String convertida para minusculo: "+cadeia); 
12 } 
13 } 
Observe que é necessário atribuir à string o resultado produzido pelo método toLowerCase, pois se 
ele for somente utilizado, produz o resultado porém não modifica a string. 
 
1.5 Copiando cadeias de caracteres 
Para a cópia de cadeias de caracteres é realizada por meio de uma atribuição simples: 
 String string1 = new String("Java"); 
 String string2 = new String(); 
 string2 = string1; 
 System.out.println(string2); 
No exemplo acima, a string2 apresentada contém a palavra java. 
O método substring copia o conteúdo de uma string, a partir da posição inicial até o fim da cadeia, 
para outra variável string: 
 5 String string1 = new String("Java"); 
 6 String string2 = new String(); 
 7 string2 = string1.substring(1,3); 
 8 System.out.println(string2); 
No exemplo acima, a string mostrada armazena as letras av que estão na posição 1 e 2 da string 2. 
 
1.6 Concatenando cadeias de caracteres 
A concatenação de cadeias de caracteres pode ser feita com o sinal de +. A string de destino receberá 
a concatenação. 
 5 String string1 = new String("Logica "); 
 6 String string2 = new String("de Programacao II"); 
 7 String string3 = new String(); 
 8 string3 = string1 + string2; 
 9 System.out.println(string3); 
O método concat concatena a cadeia string1 com a cadeia string2 e atribui essa concatenação à 
cadeia string3. 
 
1.7 Comparando cadeias de caracteres 
 
6 
 
O método equals compara duas cadeias de caracteres e retorna true se eles forem iguais, ou false 
se forem diferentes. Esse método considera letras maiúsculas símbolos diferentes de letras 
minúsculas. 
 5 String string1 = new String("java"); 
 6 String string2 = new String("Java"); 
 7 if(string1.equals(string2)) 
 8 System.out.println("Palavras iguais"); 
 9 else 
 10System.out.println("Palavras diferentes"); 
O trecho de código do exemplo acima produz como saída “Palavras diferentes”. 
O método equalsIgnoreCase compara duas cadeias de caracteres e retorna true se elas forem iguais 
ou false se elas forem diferentes. Esse método considera letras maiúsculas e minúsculas símbolos 
iguais. 
 5 String string1 = new String("java"); 
 6 String string2 = new String("Java"); 
 7 if(string1.equalsIgnoreCase(string2)) 
 8 System.out.println("Palavras iguais"); 
 9 else 
10 System.out.println("Palavras diferentes"); 
O trecho de código do exemplos acima produz como saída “Palavras iguais”. 
O método compareTo compara duas cadeias de caracteres e retorna um número inteiro que poderá 
ser: 
0 Se as duas strings são iguais 
< 0 string1 é alfabeticamente menor que a string2 
> 0 string1 é alfabeticamente maior que a string2 
 
Esse método considera letras maiúsculas símbolos diferentes de minúsculas. 
 5 String string1 = new String("Ana"); 
 6 String string2 = new String("Maria"); 
 7 int resultado; 
 8 resultado = string1.compareTo(string2); 
 9 System.out.println(resultado); 
10 if(resultado == 0) 
11 System.out.println("Palavras iguais"); 
12 else 
13 if(resultado < 0) 
14 System.out.println("Ordem alfabetica: "+string1+" - "+string2); 
15 else 
16 System.out.println("Ordem alfabetica: "+string2+" - "+string1); 
O trecho de código acima produz como resultado “Ordem alfabetica: Ana - Maria”. 
 
 
7 
 
1.8 Alterando os caracteres de uma Cadeia de Caracteres 
str1.replace(str2, str3); 
O método replace procura todas as ocorrências de str2, dentro de str1, substituindo-as por str3. 
str1.split(“separador”); 
O método Split separa o conteúdo da cadeia str1 em várias cadeias, utilizando o separador para 
determinar onde começa e termina cada nova cadeia gerada. 
O exemplo abaixo 
1 import java.util.Scanner; 
 2 public class ExemploString 
 3 { 
 4 public static void main(String args[]) 
 5 { 
 6 Scanner dado = new Scanner(System.in); 
 7 String frasedigitada; 
 8 String frase[]; 
 9 
10 int i, qtde=0; 
11 
12 System.out.println("Digite uma frase"); 
13 frasedigitada=dado.nextLine(); 
14 frase = frasedigitada.split(" "); 
15 for(i=0;i<frase.length;i++) 
16 { 
17 if (frase[i].equalsIgnoreCase("AULA")) 
18 { 
19 qtde = qtde + 1; 
20 } 
21 } 
22 System.out.println("Quantidade de palavras AULA = "+qtde); 
23 } 
24 } 
 
Ao analisar o código, percemos que na linha 8 foi declarado um vetor de strings. Este vetor é 
alimentado, na linha 14, pelo resultado produzido pelo método split na variável frasedigitada. Observe 
que o separar enviado para o split foi o espaço em branco, que é utilizado para separar as palavras. 
Desta forma em cada posição do vetor frase, existe uma palavra. Dentro do laço for (linha 17) o if 
verifica se a palavra é igual a aula. 
O método trim retira os espaços em branco do início e do fim da frase. 
String.trim(); 
O método toCharArray coloca cada caractere da cadeia texto em uma posição de um vetor do tipo 
char. 
char vetor_char[] = texto.toCharArray(); 
 
8 
 
 5 String string1 = new String("Ana Maria"); 
 6 int i; 
 7 char vetor_char[]= string1.toCharArray(); 
 8 for(i=0;i<9;i++) 
 9 System.out.println("Char: "+vetor_char[resultado]) 
 
No exemplo o vetor_char recebe na linha 7, em cada posição, um caractere da string1 e o laço for 
realiza a impressão nas linhas 8 e 9. 
 
O método charAt(posição_do_caracter) é usado quando é necessário acessar a string caractere a 
caractere. O exemplo abaixo mostra a impressão de uma string, caractere a caractere: 
 5 String string1 = new String("LOGICA"); 
 6 int i; 
 7 for(i=0;i<string1.length();i++) 
 8 System.out.println("Caractere "+i+": "+string1.charAt(i)); 
 
O trecho de código acima mostra a string1, acessando caractere a caractere por meio do método 
charAt(). 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9 
 
2.0 Registros 
Registros são estruturas de dados capazes de agregar várias informações, de diferentes tipos de 
dados em uma única variável. Dessa maneira, os programadores podem gerar novos tipos de dados, 
não se limitando apenas à utilização dos tipos de dados primitivos fornecidos pelas linguagens de 
programação. 
Cada informação contida em um registro é chamada campo. Os campos podem ser de diferentes 
tipos primitivos ou, ainda, podem representar outros registros. Por isso, registros são conhecidos 
como variáveis compostas heterogêneas. 
Exemplo de um registro Produto: 
Produto 
codigo 
nome 
valor 
 
Onde, Produto é o nome do registro e os campos são código, nome e valor. 
Em uma variável do tipo Produto é possível inserir um valor em cada campo: 
Variavel_Produto 
codigo 
nome 
valor 
 
Podemos manipular registros isoladamente, como mostrado acima, ou gerar variáveis compostas, 
como vetores e matrizes de registros. 
 
2.1 Declaração de Registros 
Registros em Java são representados por classes definidas pelo usuário, em que os campos são 
chamados de variáveis de instâncias ou atributos. 
Exemplo: 
 5 private static class Produto{ 
 6 int codigo; 
 7 String nome; 
 8 float valor; 
 9 } 
 
10 
 
O exemplo apresenta o exemplo de um registro Produto, que na linguagem Java é criado por meio 
de uma classe com visibilidade privada (private), ou seja, será visível e poderá ser utilizada apenas 
dentro da classe em que estiver inserida. Existem outros tipos de visibilidade, porém o estudo sobre 
eles não faz parte dos objetivos desta disciplina. 
O registro produto foi definido como sendo private, ou seja, somente as linhas de comando que 
estiverem dentro da classe que ele foi criado, poderão utilizá-lo. Além disso, o método main() é static, 
ele só pode utilizar variáveis e classes que tenham sido declaradas dentro dele ou que sejam static. 
Por esta razão, o registro Produto (classe) também foi definido como static. 
No exemplo a classe Produto foi definida. Isso significa que um novo tipo de dado foi criado. Nas 
linhas linhas 6, 7 e 8 são definidos os campos do registro Produto. Isto quer dizer que todas as 
variáveis declaradas desse tipo poderão armazenar três valores: código, nome, valor. 
 
2.2 Declaração e manipulação de Variáveis que são Registros 
Para o programa utilizar um registro definido pelo usuário, é necessário declarar a variável, como no 
exemplo abaixo: 
Nome_do_registro nome_da_variavel; 
Considerando que o registro cria um novo tipo de dado (construído), além de variáveis simples, 
vetores e matrizes também podem ser declarados como Registros. Dessa forma, cada elemento 
dentro da estrutura composta terá os campos definidos na criação do registro. 
Produto produto1; 
Após declarar a variável produto é necessário realizar sua inicialização (instanciação) como já 
realizamos com as strings, vetores e matrizes. 
 produto1 = new Produto(); 
Após as linhas de comandos abaixo serem executadas: 
Produto prod; 
prod = new Produto(); 
Será criado na memória um registro conforme mostrado abaixo: 
prod 
codigo prod.codigo 
nome prod.nome 
valor prod.valor 
 
Observe que para cada campo da variável prod, é possível inserir um valor utilizando o nome do 
registro seguido no nome do campo. 
 
112 public class ExemploRegistro{ 
 3 
 4 private static class Produto{ 
 5 int codigo; 
 6 String nome; 
 7 float valor; 
 8 } 
 9 
10 public static void main(String args[]){ 
11 Produto prod; 
12 prod = new Produto(); 
13 prod.codigo = 5; 
14 prod.nome = "Notebook"; 
15 prod.valor = 1500; 
16 System.out.println("Codigo: "+ prod.codigo); 
17 System.out.println("Nome: "+ prod.nome); 
18 System.out.println("Valor: "+ prod.valor); 
19 } 
20 } 
Observe que tanto para armazenar valores (linhas de 13 a 15) como para recuperar os valores 
armazenados (linhas de 16 a 18) é utilizado sempre o padrão nome_da_varivel.nome_do_campo. 
 
2.3 Vetor de Registros 
Variáveis compostas como vetores também podem ser definidas como Registros. Isto significa que 
cada posição da variável armazenará um registro com os campos definidos em sua construção. 
No programa Exemplo_Vetor_Registro é criado um vetor de registros para armazenar dados de 
uma pesquisa. O vetor possui tamanho 5 e em cada posição irá armazenar os seguintes campos: 
nome, salario, idade. Após a entrada de dados o programa mostra como saída: 
 A média de salário; 
 A menor idade; 
 O nome de quem possui maior idade. 
 
 1 import java.util.Scanner; 
 2 public class Exemplo_Vetor_Registro{ 
 3 
 4 private static class Ficha{ 
 5 String nome; 
 6 float salario; 
 7 int idade; 
 8 } 
 9 
10 public static void main(String args[]){ 
11 final int tamanho = 5; 
12 Ficha vet[] = new Ficha[tamanho]; 
13 Scanner entrada = new Scanner(System.in); 
14 int i; 
 
12 
 
15 float soma = 0, media; 
16 int menor,maior; 
17 String nome_maior; 
18 
19 for (i=0;i<tamanho;i++) 
20 { vet[i] = new Ficha(); 
21 vet[i].nome = ""; 
22 vet[i].salario = 0; 
23 vet[i].idade = 0; 
24 } 
25 
26 
27 for(i=0; i < tamanho; i++){ 
28 System.out.print("\nDigite os dados da pessoa "+i); 
29 System.out.print("\nDigite o nome: "); 
30 entrada = new Scanner(System.in); 
31 vet[i].nome = entrada.nextLine(); 
32 System.out.print("\nDigite o salario: "); 
33 vet[i].salario = entrada.nextFloat(); 
34 System.out.println("\nDigite a idade: "); 
35 vet[i].idade = entrada.nextInt(); 
36 System.out.println("\nConta cadastrada com sucesso"); 
37 } 
38 menor = vet[0].idade; 
39 maior = vet[0].idade; 
40 nome_maior = vet[0].nome; 
41 for(i=0; i < tamanho; i++){ 
42 soma = soma + vet[i].salario; 
43 if(vet[i].idade < menor) 
44 menor = vet[i].idade; 
45 if(vet[i].idade > maior){ 
46 maior = vet[i].idade; 
47 nome_maior = vet[i].nome; 
48 } 
49 } 
50 media = (float) soma/tamanho; 
51 System.out.println("Media de salario: "+ media); 
52 System.out.println("Menor idade: "+ menor); 
53 System.out.println("Nome da pessoa com maior idade: "+ nome_maior); 
54 } 
55 } 
 
Observe que como o vetor vet é uma variável composta, além da inicialização que acontece no 
momento da declaração (linha 12), também é necessário inicializar o registro de cada posição 
dentro do vetor, ação que acontece entre as linhas 19 e 24. 
O mesmo processo deve acontecer para a manipulação de matriz de registros. 
 
 
 
 
 
13 
 
REFERÊNCIAS 
ASCENCIO, A. F. G., CAMPOS, E. A.. V. Fundamentos da Programação de Computadores. 2. 
ed. São Paulo: Pearson Prentice Hall, 2007. 
PUGA, S., RISETI, G. Lógica de Programação e estrutura de dados, com aplicações em Java. 
2. Ed. São Paulo: Pearson Prentice Hall, 2009.

Continue navegando