
/**
 * Testes com "strings": StringTokenizer e leitura de teclado via "read(byte[])" e "DataInputStream"
 * @author Leônidas O. Brandão
 * @param
 * @return
 * @see 
 * */


import java.util.StringTokenizer; // importa a classe que trata ¨tokens¨ em strings

class Tokens {

 StringTokenizer tokens;

 public Tokens(String linha, String sep) {

   // quebra a string "linha" em tokens separadas pela string "sep"
   tokens = new StringTokenizer(linha, sep);
 }   

 public void lista() { // lista todos os tokens contidos
   System.out.print("Resultado: ");

   while (tokens.hasMoreTokens() ) {
     System.out.print( " | "+tokens.nextToken() );
     }
   System.out.println( " |" );
   }
}


public class ex_teclado_st_tokenizer {

 public static void main(String args[]) {
   String s_teste = "2 * ( 34.2 + 1.34 )";

   System.out.println ("Programa testa \"tokens\" em \"strings\"");

   System.out.println ("Testa a expressão: " + s_teste);
   Tokens t = new Tokens( s_teste, " ");
   t.lista();

   // Exemplo de leitura via teclado
   System.out.print("Digite alguma coisa (máximo de 10 caracteres): ");
   byte [] aux = new byte[10];  // lerá necessariamente 10 caracteres
   try { System.in.read(aux); } // obrigatório usar o "try/catch"
   catch(java.io.IOException e) {}      // 
   
   s_teste = new String(aux,0); // copia a partir da posição 0
   // System.out.println(s_teste.length());
   // s_teste = s_teste.substring(0, s_teste.length()-2); 
   t = new Tokens( s_teste, " ");
   t.lista();

   // Outro modo de leitura de teclado: mais geral
   System.out.print("Digite quaquer coisa finalizado por ENTER: ");
   java.io.DataInputStream dis = new java.io.DataInputStream( System.in );
   try {    s_teste = dis.readLine(); } // obrigatório usar o "try/catch"
   catch(java.io.IOException e) {}      // 
   t = new Tokens( s_teste, " ");
   t.lista();

   }
}
