Aula2

Propaganda
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
Prof. Valdir Gil Pillat
2. Strings
Veja alguns métodos utilizados na classe String
retorno = x.equals(y); // Compara strings, retorna (True/False)
retorno = x.equalsIgnoreCase(y); // Compara Strings ignorando maiúsculas e minúsculas,
retorna (True/False)
retorno = x.compareTo(y) // Compara Strings e retorna à diferença entre o tamanho das
Strings
y = x.replace(caracterVelho, caracterNovo);//Substitui um caractere por outro
Y = x.toLowerCase(); // Substitui os caracteres maiúsculos pelo mesmo minúsculos
Y = x.toUpperCase(); // Substitui os caracteres minúsculos pelo mesmo maiúsculos
Z = X.concat(y); // Junta duas ou mais strings. R = A.concat(B).concat(C).concat(D);
Y = X.trim(); // retira os espaços iniciais e finais da String
Y = X.substring(inicio); //Y recebe a substring X do ponto inicial (inicio) até o fim da
String
Y = X.substring(inicio, final); //Y recebe a substring X do ponto inicial (inicio) até o ponto
final (final)
Índice = A.indexOf(B); // retorna a posição da primeira ocorrência da string B na String A.
Índice = A.indexOf(B, inicio); // retorna a posição da primeira ocorrência da string B a
partir do ponto inicial (inicio) da String A.
Índice = A.lastIndexOf(B); //retorna a posição da última ocorrência da string B na String A.
Índice = A.lastIndexOf(B, inicio); // retorna a posição da última ocorrência da string B a
partir do ponto inicial (inicio) da String A.
começa = A.startsWith(B); //retorna True se a String A começa com a String B.
termina = A.endsWith(B); //retorna True se a String A termina com a String B.
caracter = A.charAt(posição); // retorna o caracter na posição indicada
tamanho = A.length (); // retorna o tamanho da String
3. Arrays
Arrays ou Vetores são estruturas de dados que me permitem guardar vários valores do
mesmo tipo em uma única variável, e identificá-los por um índice.
Para criação de arrays devemos declarar o array e depois alocar memória para ele.
tipo_array nome_array[]; //Declaração
nome_array = new tipo_array[tamanho_array]; //Alocação de memória
tipo_array nome_array = new tipo_array[tamanho_array]; //Tudo em uma linha
Obs.: Os arrays em Java inicial sempre com índice zero.
Arrays multidimensionais são declarados da seguinte forma:
double x[][] = new double[100][50];
19/08/2005
http://www.fcc.univap.br/~valdir
e-mail: [email protected]
1
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
Prof. Valdir Gil Pillat
Exemplo de Arrays de Instâncias de Classe
class alunoSimples{
int idade;
String nome;
alunoSimples(){
}
void lê_dados()
{
System.out.print(“ Entre com o nome do aluno: ”);
nome = Keyboard.readString();
System.out.print(“ Entre a idade do aluno: ”);
idade = Keyboard.readInt();
}
void imprimir(){ System.out.println(“Aluno ”+nome+“ idade ”+ idade);}
}
class demoArray{
public static void main (String args[]){
alunoSimples turma[] = new alunoSimples[10]; //turma de 10 alunos
for(int i=0;i<10;i++){
turma[i] = new alunoSimples(); //aloca memória para um aluno
turma[i].lê_dados();
}//fim for
}//fim main
}//fim class
4. Funções Matemáticas
O pacote java.lang.Math contêm várias constantes e métodos para cálculos matemáticos.
Não é necessária a criação de instâncias da classe para poder usá-la.
As duas constantes na classe Math são Math.E (base de logaritmos naturais) e Math.PI
(valor de PI).
Alguns métodos úteis da classe Math são:
abs - retorna valor absoluto (somente positivo); x= Math.abs(y);
max – retorna o maior valor entre dois valores; x= Math.max(a,b);
min – retorna o menor valor entre dois valores; x= Math.min(a,b);
round – arredonda um valor decimal; x = Math.round(a);
floor – arredonda para baixo; x= Math.floor(a);
ceil – arredonda para cima; x= Math.ceil(a);
log – calcula log (base e); x= Math.log(a);
exp – calcula exponencial; x= Math.exp(a);
sin – calcula o seno; x = Math.sin(a);
cos – calcula o cosseno; x = Math.cos(a);
tan –calcula a tangente; x = Math.tan(a);
sqrt - calcula a raiz quadrada; x = Math.sqrt(a);
pow – calcula potencia; x = Math.pow(a,b);
random – gera valores aleatórios entre 0 e 1 (inclusive); x = Math.random();
19/08/2005
http://www.fcc.univap.br/~valdir
e-mail: [email protected]
2
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
Prof. Valdir Gil Pillat
Métodos de conversão de String
Alguns métodos podem ser utilizados para converter Strings em valores nativos do Java:
X=Integer.parseInt(A); //onde X é int e A é String
Existem métodos similares nas classes Byte, Long e Short
Interessante: System.currentTimeMillis(); // retorna o tempo em milissegundos
5. Manipulação de arquivos
Outro dispositivo de entrada e saída de vital importância é disco, manipulado pelo sistema
operacional e por linguagens de programação através do conceito de arquivos. Um arquivo é uma
abstração utilizada por sistemas operacionais para uniformizar a interação entre o ambiente de
execução e os dispositivos externos a ele em um computador. Tipicamente, a interação de um
programa com um dispositivo através de arquivos passa por três etapas: abertura ou criação de um
arquivo; transferência de dados; e fechamento do arquivo.
Em Java, a classe File permite representar arquivos nesse nível de abstração. Um dos construtores
desta classe recebe como argumento uma string que pode identificar, por exemplo, o nome de um
arquivo em disco. Os métodos desta classe permitem obter informações sobre o arquivo. Por
exemplo, exists() permite verificar se o arquivo especificado existe ou não; os métodos canRead() e
canWrite() verificam se o arquivo concede a permissão para leitura e escrita, respectivamente;
length() retorna o tamanho do arquivo e lastModified(), o tempo em que ocorreu a última
modificação (em milissegundos desde primeiro de janeiro de 1970). Outros métodos permitem
ainda realizar operações sobre o arquivo como um todo, tais como delete() e deleteOnExit().
Observe que as funcionalidades de transferência seqüencial de dados a partir de ou para um arquivo
não é suportada pela classe File, mas sim pelas classes FileInputStream, FileOutputStream,
FileReader e FileWriter. Todas estas classes oferecem pelo menos um construtor que recebe como
argumento um objeto da classe File e implementam os métodos básicos de transferência de dados
suportados respectivamente por InputStream, OutputStream, Reader e Writer.
Para aplicações que necessitam manipular arquivos de forma não seqüencial (ou “direta”),
envolvendo avanços ou retrocessos arbitrários na posição do arquivo onde ocorrerá a transferência,
Java oferece a classe RandomAccessFile. Esta não é derivada de File, mas oferece um construtor
que aceita como argumento de especificação do arquivo um objeto dessa classe. Outro construtor
recebe a especificação do arquivo na forma de uma string. Para ambos construtores, um segundo
argumento é uma string que especifica o modo de operação, “r” para leitura apenas ou “rw” para
leitura e escrita.
Os métodos para a manipulação da posição corrente do ponteiro no arquivo são seek(long pos), que
seleciona a posição em relação ao início do arquivo para a próxima operação de leitura ou escrita, e
getFilePointer(), que retorna a posição atual do ponteiro do arquivo. Além disso, o método length()
retorna o tamanho do arquivo em bytes.
Para a manipulação de conteúdo do arquivo, todos os métodos especificados pelas interfaces
DataInput e DataOutput são implementados por essa classe. Assim, é possível por exemplo usar os
métodos readInt() e writeInt() para ler e escrever valores do tipo primitivo int, respectivamente.
19/08/2005
http://www.fcc.univap.br/~valdir
e-mail: [email protected]
3
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
Prof. Valdir Gil Pillat
Exemplo simples Leitura de texto
import java.io.*
class demofile
{
public static void main (String args[])
{
String arquivo = “teste.dat”;
try
{
FileReader fr = new FileReader(arquivo);
BufferedReader br = new BufferedReader(fr);
boolean aindatemmais = true;
while (aindatemmais == true)
{
String linha = br.readLine(); //Lê uma linha
if (linha == null)
aindatemmais = false;
else
System.out.println(linha);
} //fim do while
br.close();
}
catch (IOException e)
{ System.out.println( “Erro ! Não é possível ler o arquivo ” + arquivo);
System.exit(1);
}//fim catch
}//fim main
}//fim class
Exemplo simples gravação de texto
import java.io.*
class demofile
{
public static void main (String args[])
{
String arquivo = “fatoriais.dat”;
try
{
FileWriter fw = new FileWriter(arquivo);
BufferedWriter br = new BufferedWriter(fr);
double factorial = 1;
for (int f=1;f<200;f++)
{
fatorial *= f;
19/08/2005
http://www.fcc.univap.br/~valdir
e-mail: [email protected]
4
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
Prof. Valdir Gil Pillat
bw.write ( “O fatorial de ”+f+ “ é ”+ fatorial);
bw.newLine();
}
bw.close();
}
catch (IOException e)
{ System.out.println( “Erro ! Não é possível ler o arquivo ” + arquivo);
System.exit(1);
}//fim catch
}//fim main
}//fim class
Exemplo simples Leitura de texto utilizando RandomAccessFile
import java.io.*
class demofile
{
public static void main (String args[])
{
String arquivo = “teste.dat”;
try
{
RandomAccessFile file = new RandomAccessFile(arquivo, “r”);
boolean aindatemmais = true;
while (aindatemmais == true)
{
String linha = file.readLine(); //Lê uma linha
if (linha == null)
aindatemmais = false;
else
System.out.println(linha);
} //fim do while
file.close();
}
catch (IOException e)
{ System.out.println( “Erro ! Não é possível ler o arquivo ” + arquivo);
System.exit(1);
}//fim catch
}//fim main
}//fim class
19/08/2005
http://www.fcc.univap.br/~valdir
e-mail: [email protected]
5
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
Prof. Valdir Gil Pillat
Exercícios.
1. Faça um programa em Java que fique lendo uma string do teclado enquanto o tamanho
desta string for menos que 10 caracteres.
2. Faça um programa em Java que substitua todas as vogais de uma string pelo caracter “?”.
3. Faça um programa em Java que conte quantas ocorrências de um determinado caracter
em uma string.
4. Reescreva o exemplo de leitura de arquivo simples para que o nome do arquivo seja
passado via teclado.
5. Procure uma palavra dentro do arquivo. Dica: Utilize o método indexOf().
6. Leia um arquivo e guarde em um array.
7. Modifique o exercício 6 para armazenar pedaços da linha em arrays multidimensionais.
8. Modifique os exercícios 5 e 6 utilizando a classe StringTokenizer
19/08/2005
http://www.fcc.univap.br/~valdir
e-mail: [email protected]
6
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
Prof. Valdir Gil Pillat
Apêndice Aula 2
Sobre a classe StringTokenizer
Em alguns exemplos e exercícios anteriores fizemos a quebra de Strings em posições
definidas (por exemplo, pegando de uma String os caracteres de 0 a 9, etc). Isto só pode ser
feito quando temos certeza de onde estão as divisões dos elementos na String. Por exemplo,
para separar a String 32980018 07.3 08.3 10.0 07.0 nos seus componentes (que podem ser
processados posteriormente), precisamos saber a localização exata dos espaços divisores.
Um erro de localização e podemos ter problemas com o processamento posterior.
Em algumas aplicações de processamento de textos e Strings, informação é codificada de
maneira diferente: ao invés de separar dados usando posições definidas, caracteres
específicos (chamados de tokens ) são usados como separadores. A String mostrada acima
como exemplo poderia ser codificada usando vírgulas como separadores:
32980018,7.3,8.3,10,7. Neste caso, a separação da String em seus componentes não poderia
ser feita usando posições pré-definidas.
A classe StringTokenizer permite a quebra de uma string em seus tokens, independente da
posição dos separadores. A classe StringTokenizer tem construtores que recebem como
argumentos as Strings a serem processadas e métodos para criar e contar os tokens.
Os construtores e métodos da classe StringTokenizer são:
* StringTokenizer(String orig): Cria uma instância da classe StringTokenizer que vai
quebrar a String orig em seus componentes, separados por espaços (implicitamente).
Os espaços serão eliminados das Strings resultantes.
* StringTokenizer(String orig,String separadores): Cria uma instância da classe
StringTokenizer que vai quebrar a String orig em seus componentes, separados pelos
caracteres na String separadores de forma que qualquer caracter na String separadores
servirá como separador. Estes caracteres serão eliminados das Strings resultantes.
* StringTokenizer(String orig,String separadores,boolean inclui): Cria uma instância
da classe StringTokenizer que vai quebrar a String orig em seus componentes, separados
pelos caracteres na String separadores da mesma forma que o construtor anterior. O valor
booleano adicional inclui será usado para decidir se os separadores também serão incluidos
na lista de Strings resultantes.
* countTokens(): retorna o número de tokens que existem na instância de
StringTokenizer.
* hasMoreTokens(): retorna um valor booleano que indica se existem mais Tokens na
instância de StringTokenizer.
* nextToken(): retorna o próximo token da instância de StringTokenizer como uma
String.
Os tokens são retornados como uma fila de Strings: somente o próximo token da fila pode
ser lido, e depois de lido é eliminado da fila, como mostrado abaixo para a String exemplo
32980018,7.3,8.3,10,7:
19/08/2005
http://www.fcc.univap.br/~valdir
e-mail: [email protected]
1
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
Prof. Valdir Gil Pillat
Passo Lista de Strings
String lida Lista Resultante
1 [32980018 7.3 8.3 10 7] 32980018 [7.3 8.3 10 7]
2 [7.3 8.3 10 7]
7.3
[8.3 10 7]
3 [8.3 10 7]
8.3
[10 7]
4 [10 7]
10
[7]
5 [7]
7
[] (a lista vazia)
Quando a lista estiver vazia, o valor retornado por hasMoreTokens() será false. Depois que
um token é lido da instância de StringTokenizer, não pode ser recolocado na lista.
Os programas abaixo ilustram exemplos da classe StringTokenizer.
Listagem 10. Programa que demonstra a classe StringTokenizer
1 // A linha abaixo é necessária para o uso da classe StringTokenizer
2 import java.util.*;
3
4 // Uma classe para demonstrar a classe StringTokenizer
5 class demoTokens
6 {
7 public static void main(String args[])
8 {
9 // Uma String para teste
10
String test = "Isto é um teste";
11 // A partir da String crio um StringTokenizer, separando os
12 // tokens por espaços (implicitamente)
13
StringTokenizer st = new StringTokenizer(test);
14 // quantos tokens eu tenho na String ?
15 int quantosTokens = st.countTokens();
16
System.out.println("Número de tokens:"+quantosTokens);
17 // vamos ver quais são os tokens ?
18 for(int cont=0;cont<quantosTokens;cont++)
19
{
20
System.out.println(st.nextToken());
21
}
22 // Outra String para teste
23
String outroTest = "um, dois, três, quatro, cinco, seis, sete, oito";
24 // A partir da String crio um StringTokenizer, separando os
25 // tokens por vírgulas (explicitamente)
26
StringTokenizer outroSt = new StringTokenizer(outroTest,",");
27 // quantos tokens eu tenho na String ?
28
quantosTokens = outroSt.countTokens();
29
System.out.println("Número de tokens:"+quantosTokens);
30 // vamos ver quais são os tokens ?
31 for(int cont=0;cont<quantosTokens;cont++)
32
{
33
System.out.println(outroSt.nextToken());
34
}
35
} // fim do método main
36 } // fim da classe
19/08/2005
http://www.fcc.univap.br/~valdir
e-mail: [email protected]
2
Download