JAVA - Apostila
532 pág.

JAVA - Apostila


DisciplinaProgramação Orientada A Objetos3.319 materiais50.715 seguidores
Pré-visualização28 páginas
método length
Exemplo
String str = "The quick brown fox jumps over the lazy dog";
System.out.printf( "Tamanho: %d", str.length() ); /* 43 */
/* Imprime o string, mas caractere a caractere */
for ( int i = 0; i < str.length(); i++ ) {
System.out.printf( &quot;%c&quot;, str.charAt( i ) );
}
/* Imprime o inverso do string (caractere a caractere) */
for ( int i = str.length() - 1; i >= 0; i-- ) {
System.out.printf( &quot;%c&quot;, str.charAt( i ) );
}
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 453 / 527
Materiais Complementares \u2013 Classe String
Concatenando strings
Basta utilizar o operador +, mas também pode usar o
método concat (desnecessário)
Exemplo
String firstName = &quot;Ricardo&quot;;
String lastName = &quot;Terra&quot;;
String name = firstName + &quot; &quot; + lastName;
System.out.println( name ); /* Ricardo Terra */
String nameFormatted = lastName.concat( &quot;, &quot; ).concat( firstName );
System.out.println( nameFormatted ); /* Terra, Ricardo */
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 454 / 527
Materiais Complementares \u2013 Classe String
Localizando strings
Existem dois métodos comuns para localizar strings em um
string:
indexOf: Procura a primeira ocorrência do string e retorna o
índice que ela começa. Caso não exista, retorna -1
lastIndexOf: Procura a última ocorrência do string e retorna
o índice que ela começa. Caso não exista, retorna -1
Exemplo
String str = &quot;The quick brown fox jumps over the lazy dog&quot;;
System.out.printf( &quot;\&quot;fox\&quot;? %d\n&quot;, str.indexOf(&quot;fox&quot;) ); /* 16 */
System.out.printf( &quot;\&quot;cat\&quot;? %d\n&quot;, str.indexOf(&quot;cat&quot;) ); /* -1 */
System.out.printf( &quot;\&quot;he\&quot;? %d\n&quot;, str.indexOf(&quot;he&quot;) ); /* 1 */
System.out.printf( &quot;\&quot;he\&quot;? %d\n&quot;, str.lastIndexOf(&quot;he&quot;) ); /* 32 */
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 455 / 527
Materiais Complementares \u2013 Classe String
Formatando strings
Existem três métodos comuns para formatar strings:
toLowerCase: Retorna um string toda em caixa baixa
toUpperCase: Retorna um string toda em caixa alta
trim: Retorna um string sem espaços em branco no início e
no fim
Exemplo
String str = &quot; Jose &quot;;
System.out.println( &quot;<&quot; + str.toLowerCase() + &quot;>&quot; ); /* < jose > */
System.out.println( &quot;<&quot; + str.toUpperCase() + &quot;>&quot; ); /* < JOSE > */
System.out.println( &quot;<&quot; + str.trim() + &quot;>&quot; ); /* <Jose> */
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 456 / 527
Materiais Complementares \u2013 Classe String
Um pouco de expressão regular
É possível verificar se um string segue uma expressão regular.
Para isso, deve-se utilizar o método matches
Exemplo
String str = Teclado.lerString( &quot;Carro com \u2019F\u2019 e termina com \u2019i\u2019&quot; );
if ( str.matches( &quot;F.*i&quot; ) ) {
System.out.println( &quot;OK!&quot; );
} else {
System.out.println( &quot;NOK!&quot; );
}
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 457 / 527
Materiais Complementares \u2013 Classe String
Fragmentando strings
É possível dividir um string pela aparição de um caractere
ou de um string. Para isso, deve-se utilizar o método split
Assinatura:
public String[] split ( String separador )
Exemplo
String str = &quot;Carlos,Joao,Maria,Pedro&quot;;
String nomes[] = str.split( &quot;,&quot; );
for ( String nome : nomes ) {
System.out.println( nome );
}
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 458 / 527
Materiais Complementares
Classe Date
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 459 / 527
Materiais Complementares \u2013 Classe Date
Armazenando uma data
Em Java, quando deseja-se armazenar uma data,
utilizamos a classe java.util.Date
A classe java.util.Date representa um instante
específico no tempo, com precisão de milisegundos
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 460 / 527
Materiais Complementares \u2013 Classe Date
Construtores
Um tipo Date pode ser criado:
vazio:
Date d = new Date ();
Isso indica que o objeto d armazena a data exata em que foi
criado
a partir no número de milisegundos a partir de 01/01/1970:
Date d1 = new Date ( 450010883000L );
/* 05/04/1984 08:01:23 */
Date d2 = new Date ( -14821304400000L );
/* 22/04/1500 12:00:00 */
Isso indica que o objeto d armazena a data correspondente
a 01/01/1970 + número de milisegundos passados
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 461 / 527
Materiais Complementares \u2013 Classe Date
Alguns métodos relevantes
1 /* Retorna o número de milisegundos a partir de 1/1/1970 */
public long getTime ( );
3
/* Altera o número de milisegundos a partir de 1/1/1970 */
5 public void setTime ( long time );
7 /* Testa se esta data está depois da data especificada */
boolean after ( Date when );
9
/* Testa se esta data está antes da data especificada */
11 boolean before ( Date when );
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 462 / 527
Materiais Complementares \u2013 Classe Date
Exemplo
1 Date d1 = new Date(); /* Agora */
3 Date d2 = new Date ( d1.getTime() - 60000 ); /* 1min antes de agora */
5 d1.setTime( 0L ); /* 01/01/1970 */
7 System.out.println(&quot;d1 antes de d2? &quot; + d1.before( d2 )); /* true */
System.out.println(&quot;d1 depois de d2? &quot; + d1.after( d2 )); /* false */
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 463 / 527
Materiais Complementares \u2013 Classe Date
Manipulação de Data
Para operações de manipulação de data como somar
dias, alterar mês, subtrair uma data de outra, obter a
diferença entre duas datas, deve-se utilizar subclasses de
java.util.Calendar
Esse é um tópico para vocês pesquisarem, caso desejem
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 464 / 527
Materiais Complementares
Classe StringBuilder e StringBuffer
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 465 / 527
Materiais Complementares \u2013 Classe StringBuilder e
StringBuffer
Problema
Sabemos que quando você \u201caltera\u201d um string, na verdade,
um novo string é criado e o coletor de lixo (Garbage
Collector ou GC) fica responsável por liberar a área de
mémória anterior
Isto pode não ser um problema ao trabalhar com strings
pequenas. Contudo, imagine:
alteração de um caractere em um string armazenando todo
o conteúdo do livro do Deitel
inserção caractere a caractere em um string
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 466 / 527
Materiais Complementares \u2013 Classe StringBuilder e
StringBuffer
\u201cPrograma Assassino\u201d
String tabelaAscii = &quot;&quot;;
for ( char c = 0; c <= 255; c++ ) {
tabelaAscii += c;
}
System.out.println( tabelaAscii );
Pergunta
O que ocorre por trás desse programa?
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 467 / 527
Materiais Complementares \u2013 Classe StringBuilder e
StringBuffer
Solução
No exemplo anterior para criar um string contendo os 255
caracteres da tabela ASCII, antes foram criados e
descartados 255 strings
Logo, para manipulação de strings não é recomendável
utilizar String, mas sim, StringBuilder ou StringBuffer
Essas classes foram criadas exclusivamente para a
manipulação de strings e têm a vantagem de não criar
strings a cada alteração
Isto é, fazem um bom uso da memória
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 468 / 527
Materiais Complementares \u2013 Classe StringBuilder e
StringBuffer
StringBuilder ou StringBuffer
StringBuilder ou StringBuffer funcionam exatamente
da mesma forma
A única diferença é que StringBuffer é thread-safe, isto
é, não deixa que dois threads acessem simultaneamente
Sucintamente, é como se todos os métodos de
StringBuffer fosse synchronized
Assim, os slides a seguir abordam exclusivamente
StringBuilder, mas funcionam de forma idêntica com
StringBuffer
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 469 / 527
Materiais Complementares \u2013 Classe StringBuilder e
StringBuffer
Construtores