Capítulo 6 - Strings, Formatação e Parsing

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

1 comments

Comments 1 - 1 of 1 previous next Post a comment

  • + guest98c02f guest98c02f 8 months ago
    Obrigada pelo vídeo, me auxiliou muito no entendimento, pois depois de ler o livro da Katie Sierra, tinham ficado muitas dúvidas. Obrigada.
Post a comment
Embed Video
Edit your comment Cancel

Favorites, Groups & Events

Capítulo 6 - Strings, Formatação e Parsing - Presentation Transcript

  1. 6. Strings, E/S, Formatação e Parsing João Sávio C. Longo 04:11
  2. String, StringBuilder e StringBuffer
    • Objetos String são inalteráveis, mas as variáveis de referência String não;
    • String s = “abc”;
    • String s2 = s; //mesmo objeto
    • s = s.concat(“def”); //dois objetos!;
    • s2 = “abc” e s = “abcdef”;
    João Sávio C. Longo 04:11
  3. String, StringBuilder e StringBuffer
    • A classe String é final;
    • Os métodos de String usam índices iniciados em zero, exceto para o segundo argumento de substring();
    • String -> método length(), arrays -> length;
    João Sávio C. Longo 04:11
  4. StringBuilder vs StringBuffer
    • São alteráveis;
    • StringBuffer é sincronizada (segura em relação aos threads);
    • StringBuilder é mais rápida;
    João Sávio C. Longo 04:11
  5. Métodos
    • delete(int start, int end) -> começo inicia pelo “zero” e fim inicia pelo “um”;
    • Insert(int offset, String s) -> índice de deslocamento é o offset. Exemplo:
    • StringBuilder sb = new StringBuilder(“01234567”);
    • sb.insert(4, “---”);
    • //sb = “0123---4567”
    João Sávio C. Longo 04:11
  6. Navegação de Arquivos e E/S
    • File, FileReader, BufferedReader, FileWriter, BufferedWriter e PrintWriter;
    • Um novo objeto File não significa que há um novo arquivo no HD;
    • Objetos File podem representar um arquivo ou um diretório;
    • A classe File permite adicionar, remover e apagar arquivos e diretórios;
    João Sávio C. Longo 04:11
  7. Navegação de Arquivos e E/S
    • FileWriter e FileReader são classes de E/S de baixo nível;
    • É bastante comum “encapsular” um BufferedReader em um FileReader e/ou um BufferedWriter em um FileWriter, para se ter acesso a métodos de nível mais alto;
    • PrintWriters podem ser usados para encapsular outros Writers e podem ser criados diretamente a partir de Files ou Strings;
    João Sávio C. Longo 04:11
  8. Criando um arquivo
    • try {
    • File dir = new File(“diretorio”); //ainda não temos um diretório
    • dir.mkdir(); //agora temos
    • File file = new File(dir, “teste.txt”); //não cria o arquivo
    • file.createNewFile(); //cria o arquivo no HD
    • }
    • catch (Exception e) {}
    João Sávio C. Longo 04:11
  9. 04:11 João Sávio C. Longo Classe de java.io Estende de Argumentos principais dos contrutores File Object File, String String String, String FileWriter Writer File String BufferedWriter Writer Write PrintWriter Writer File (Java 5) String (Java 5) Writer OutputStream FileReader Reader File String BufferedReader Reader Reader
  10. Considerações
    • File file = new File(“teste”);
    • Se “teste” não existir, não é criado nenhum arquivo;
    • Senão, o novo objeto File refere-se ao arquivo existente;
    • File file = new File(“teste”);
    • try {
    • PrintWriter pw = new PrintWriter(file); //é criado
    • o arquivo “teste”;
    • } catch (Exception e) {}
    João Sávio C. Longo 04:11
  11. Serialização
    • Salvar o estado de um objeto;
    • A classe a ser serializada precisa implementar “Serializable”;
    • Se a superclasse implementar “Serializable”, então as suas subclasses também a implementam automaticamente;
    • Se a superclasse não implementar “Serializable”, então quando um objeto da subclasse for desserializado, o construtor da superclasse será executado;
    • As variáveis estáticas NUNCA serão salvas como parte do estado do objeto, porque elas não pertencem ao objeto!;
    João Sávio C. Longo 04:11
  12. Exemplo
    • class Cat implements Serializable { }
    • public class SerializaCat {
    • public static void main(String[] args) {
    • Cat c = new Cat();
    • //serializando
    • try {
    • FileOutputStream fs = new FileOutputStream(“teste.ser”);
    • ObjectOutputStream os = new ObjectOutputStream(fs);
    • os.writeObject(c);
    • os.close();
    • }
    • catch (Exception e) { }
    João Sávio C. Longo 04:11
    • //desserializando
    • try {
    • FileInputStream fis = new FileInputStream(“teste.ser);
    • ObjectInputStream ois = new ObjectInputStream(fis);
    • c = (Cat) ois.readObject();
    • ois.close();
    • }
    • catch(Exception e) { }
    • }
    João Sávio C. Longo 04:11
  13. Serialização
    • Quando você serializa um objeto, a serialização salva todo o “gráfico de objetos”;
    • class Cat implements Serializable {
    • private String nome;
    • private Dono dono;
    • //a classe Dono também precisa implementar Serializable
    • }
    João Sávio C. Longo 04:11
  14. Considerações
    • Se marcarmos a variável de instância “Dono” como “transient” a serialização ignorará o “Dono” durante o processo;
    • Mas você precisará restaurar o “Dono” na desserialização. Pode-se usar métodos especiais para este problema;
    João Sávio C. Longo 04:11
  15. Métodos Especiais
    • private void writeObject(ObjectOutputStream os) {
    • //aqui entra o código para salvar o “Dono”
    • }
    • private void readObject(ObjectInputStream os) {
    • //aqui entra o código para ler o estado do “Dono”, criar um novo “Dono” e atribuí-lo ao “Cat”
    • }
    João Sávio C. Longo 04:11
  16. Exemplo
    • public class Cat implements Serializable {
    • private String nome;
    • private transient Dono dono;
    • private void writeObject(ObjectOutputStream os) {
    • //lança IOException
    • try {
    • os.defaultWriteObject();
    • os.writeObject(dono);
    • }
    • catch(Exception e) { }
    • }
    João Sávio C. Longo 04:11
    • private void readObject(ObjectInputStream ois) {
    • //lança IOException, ClassNotFoundException
    • try {
    • ois.defaultReadObject();
    • dono = (Dono) ois.readObject();
    • }
    • catch(Exception e) { }
    • }
    • }
    João Sávio C. Longo 04:11
  17. Considerações
    • As referências a objetos marcadas como transient serão sempre resetadas como null, independentemente se elas foram inicializadas no momento da declaração da classe;
    • class Cat implements Serializable {
    • transient int idade = 5;
    • }
    • Quando a instância de Cat for desserializada “idade” será definida como 0;
    João Sávio C. Longo 04:11
  18. Datas, Números e Moeda
    • java.util.Date;
    • java.util.Calendar;
    • java.text.DateFormat;
    • java.text.NumberFormat;
    • java.util.Locale;
    João Sávio C. Longo 04:11
  19. java.util.Date
    • Maioria dos métodos foram depreciados;
    • Um Date é armazenado como um long e refere-se ao número de milisegundos desde 1º de janeiro de 1970;
    • Objetos Date são uma espécie de ponte entre as classes Calendar e Locale;
    João Sávio C. Longo 04:11
  20. java.util.Calendar
    • Possui um conjunto poderoso de métodos para manipulação de datas;
    • Calendar c = Calendar.getInstance();
    • Métodos importantes -> add() e roll();
    • roll() funciona como um add(), mas não incrementa as partes maiores de uma data;
    João Sávio C. Longo 04:11
  21. java.util.Locale
    • Locale locPt = new Locale(“pt”);
    • Locale locBr = new Locale(“pt”, “br”);
    • DateFormat e NumberFormat podem ter os seus locais definidos somente no momento da instanciação;
    João Sávio C. Longo 04:11
  22. java.text.DateFormat
    • DateFormat.getInstance() -> 9/8/01 7:46 PM;
    • DateFormat.getDateInstance() -> Sep 8, 2001;
    • DateFormat.getDateInstance(DateFormat.SHORT) -> 9/8/01;
    • DateFormat.getDateInstance(DateFormat.MEDIUM) -> Sep 8, 2001;
    • DateFormat.getDateInstance(DateFormat.LONG) -> September 8, 2001;
    • DateFormat.getDateInstance(DateFormat.FULL) -> Saturday, September 8, 2001;
    João Sávio C. Longo 04:11
  23. java.text.NumberFormat
    • NumberFormat.getInstance() retorna o número com 3 casas após a vírgula;
    • NumberFormat.getCurrencyInstance() retorna o número com o símbolo da moeda;
    • métodos: -> getMaximumFractionDigits(), setMaximumFractionDigits(), parse() e setParseIntegerOnly();
    João Sávio C. Longo 04:11
  24. João Sávio C. Longo 04:11 Classes Principais Opções de criação para as instâncias java.util.Date new Date(); new Date(long milisegundos); java.util.Calendar Calendar.getInstance(); Calendar.getInstance(Locale); java.util.Locale Locale.getDefault(); new Locale(String língua); new Locale(String língua, String país); java.text.DateFormat DateFormat.getInstance(); DateFormat.getDateInstance(); DateFormat.getDateInstance(estilo); DateFormat.getDateInstance(estilo, Locale); java.text.NumberFormat NumberFormat.getInstance(); NumberFormat.getInstance(Locale); NumberFormat.getNumberInstance(); NumberFormat.getNumberInstance(Locale); NumberFormat.getCurrencyInstance(); NumberFormat.getCurrencyInstance(Locale);
  25. Parsing, Tokenização e Formatação João Sávio C. Longo 04:11
  26. Busca Simples
    • import java.util.regex.*;
    • class RegexTest {
    • Pattern p = Pattern.compile(“ab”); //expressão
    • Matcher m = p.matcher(“abaaaba”); //fonte
    • boolean b = false;
    • while (b = m.find()) {
    • System.out.println(m.start() + “ “);
    • }
    • }
    • Isso produz 0 4
    João Sávio C. Longo 04:11
  27. Busca Usando Metacaracteres
    • d -> um dígito;
    • s -> um caractere de espaço em branco;
    • w -> um caractere de palavra (letras, dígitos ou “_”);
    • Se fonte = “a 1 56 _z” e padrão = w então o regex retornará 0, 2, 4, 5, 7 e 8;
    João Sávio C. Longo 04:11
  28. Conjuntos de Caracteres
    • [abc] -> procura caracteres a, b ou c;
    • [a-f] -> procura caracteres a, b, c, d, e ou f;
    • [a-fA-F] -> não procura “fA”;
    João Sávio C. Longo 04:11
  29. Buscas Usando Quantificadores
    • + -> uma ou mais ocorrências;
    • * -> zero ou mais ocorrências;
    • ? -> zero ou uma ocorrência;
    • . -> qualquer caracter serve;
    • ^ -> exceto;
    João Sávio C. Longo 04:11
  30. Exemplos
    • d+ -> encontre um ou mais dígitos seguidos;
    • 0 [xX] ( 0-9a-fA-F )+ -> número hexadecimal;
    • [^abc] -> encontre tudo exceto a, b e c;
    • d d d ( [-s] )? d d d d -> nº de telefone válido;
    • [a.c]* -> encontre “a” seguido de qualquer caractere, seguido de “c”, zero ou mais ocorrências;
    João Sávio C. Longo 04:11
  31. Problema
    • fonte = yyxxxyxx;
    • padrão = .*xx;
    • Qual a saída?
    • a- 0 yyxx e 4 xyxx
    • b- 0 yyxxxyxx
    João Sávio C. Longo 04:11
  32. Quantificadores Gananciosos e Relutantes
    • ? é ganancioso, ?? é relutante, para zero ou um;
    • * é ganancioso, *? é relutante, para zero ou mais;
    • + é ganancioso, +? é relutante, para um ou mais;
    João Sávio C. Longo 04:11
  33. Ganancioso vs Relutante
    • Ganancioso -> olha o conjunto inteiro;
    • Relutante -> olha uma pequena parte do conjunto;
    João Sávio C. Longo 04:11
  34. Problema anterior
    • Se fonte = yyxxxyxx e padrão = .*xx então o quantificador é ganancioso, portanto a saída é
    • 0 yyxxxyxx;
    • Se fonte = yyxxxyxx e padrão = .*?xx então o quantificador é relutante, portanto a saída é
    • 0 yyxx e 4 xyxx;
    João Sávio C. Longo 04:11
  35. Considerações
    • String pattern = “d”; //erro de compilação!!!;
    • String pattern = “\d”; //agora sim;
    • String p = “.”; //o regex vê isso como um metaracter “.”;
    • String p = “.”; //erro de compilação;
    • String p = “\.”; //o regex vê um ponto;
    João Sávio C. Longo 04:11
  36. Passagem de metacaracteres para o programa Java
    • java DoRegex “d”;
    • classe metacaracter
    João Sávio C. Longo 04:11
  37. Exemplo
    • import java.util.regex.*;
    • class Regex {
    • public static void main(String[] args) {
    • Pattern p = Pattern.compile(args[0]);
    • Matcher m = p.matcher(args[1]);
    • boolean b = false;
    • while ( b = m.find() ) {
    • System.out.println( m.start() + “ “ + m.group() );
    • }
    • }
    • }
    • E a chamada java Regex “dw” “ab4 56_7ab”. Qual a saída?
    • A saída é 4 56 e 7 7a;
    João Sávio C. Longo 04:11
  38. Buscando com a classe Scanner
    • try {
    • Scanner s = new Scanner(System.in);
    • String token;
    • do {
    • token = s.findinLine(args[0]);
    • System.out.println(“found “ + token);
    • } while (token != null);
    • }
    • catch (Exception e) { }
    • java ScanIn “dd” “1b2c335f456”
    • A saída é found 33 found 45 found null
    João Sávio C. Longo 04:11
  39. Tokenização
    • É o processo de se pegar grandes pedaços de dados-fonte, dividi-los em pedaços pequenos e armazenar esses pedaços pequenos em variáveis;
    • Usa delimitadores, que podem ser qualquer coisa que seja capaz de se qualificar como uma expressão regex;
    João Sávio C. Longo 04:11
  40. Tokenizando com String.split()
    • String[] tokens = args[0].split(args[1]);
    • for(String s: tokens) {
    • System.out.println(“>” + s + “<“);
    • }
    • java SplitTest “ab5 ccc 45 @” “d”
    • A saída é:
    • >ab<
    • > ccc <
    • ><
    • > @<
    • Repare que todos os dígitos foram usados como delimitadores e que os dígitos contíguos criaram um token vazio;
    João Sávio C. Longo 04:11
  41. Considerações
    • Se precisar criar um String que contenha aspas duplas ou uma barra invertida, terá que adicionar um caracter de escape primeiro;
    • System.out.println(“” \”); //isso exibe “ ;
    • Se você precisar procurar por pontos nos seus dados-fonte?
    • String s = “ab.cde.fg”;
    • String[] tokens = s.split(“\.”);
    João Sávio C. Longo 04:11
  42. Tokenizando com Scanner
    • Scanner scanner = new Scanner(System.in);
    • boolean b, b2;
    • String s, hits;
    • while (b = scanner.hasNext()) {
    • if (scanner.hasNextInt()) {
    • i = scanner.nextInt(); hits += “i”;
    • }
    • else if (scanner.hasNextBoolean()) {
    • b2 = scanner.nextBoolean(); hits += “b”;
    • }
    • else {
    • scanner.next(); hits += “s”;
    • }
    • }
    João Sávio C. Longo 04:11
  43. Formatando com printf() e format()
    • % [arg_index$] [flags] [width] [.precision] conversion;
    • arg_index -> um número inteiro seguido diretamente por um $, isso indica qual argumento deverá ser exibido nessa posição;
    • flags:
    • “ -” -> justifica o argumento à esquerda;
    • “ +” -> inclui o sinal do número;
    • “ 0” -> preenche os vazios deste argumento com zeros;
    • “ ,” -> usa a vírgula ao invés do ponto no separador de milhar;
    • “ (“ -> coloca números negativos entre parênteses;
    João Sávio C. Longo 04:11
    • width -> indica o número mínimo de caracteres a serem exibidos;
    • precision -> indica o número de dígitos a serem exibidos depois do ponto decimal;
    • conversion -> o tipo de argumento que você está formatando:
    • b -> boolean;
    • c -> char;
    • d -> integer;
    • f -> floating point;
    • s -> string
    • Se o seu caractere de conversão não bater com o tipo do argumento, será lançada uma excessão;
    João Sávio C. Longo 04:11
  44. Exemplo
    • int i1 = -123;
    • int i2 = 12345;
    • 1. System.out.printf(“> %1$(7d < ”, i1);
    • 2. System.out.printf(“> %0,7d < ”, i2);
    • 3. System.out.printf(“> %+-7d < ”, i2);
    • 4. System.out.format(“> %2$b + %1$5d < ”, i1, false);
    João Sávio C. Longo 04:11
  45. Resposta
    • > (123)<
    • >012,345<
    • +12345 <
    • >false + -123<
    João Sávio C. Longo 04:11

+ João LongoJoão Longo, 2 years ago

custom

1567 views, 0 favs, 0 embeds more stats

More info about this document

© All Rights Reserved

Go to text version

  • Total Views 1567
    • 1567 on SlideShare
    • 0 from embeds
  • Comments 1
  • Favorites 0
  • Downloads 0
Most viewed embeds

more

All embeds

less

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

Cancel
File a copyright complaint
Having problems? Go to our helpdesk?

Categories