• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gurzi

[Java] StreamTokenizer

1 mensagem neste tópico

Bem comunidade, estava a aprender a usar as StreamsTokenizers e decidi brincar um bocado com isto, vou partilhar com vocês o meu código mas antes de mais quero só esclarecer possíveis dúvidas.

nextToken: devolve um inteiro (int) que pode ser um TT_NUMBER ou TT_WORD (entre outras, mas para o caso essas duas chegam).

nval e sval: estes dois fields vão conter o valor inserido pelo utilizador, em caso de uma string sval, em caso de um int nval.

Qualquer valor armazenado em nval, sval, etc. está em formato double, sendo necessário elaborar um cast para o respectivo tipo.

Criei o método readToken() visto que está disposto a ler qualquer coisa inserido num try / catch visto que obrigatoriamente pode lançar uma excepção.

Depois utilizei vários métodos específicos de leitura como readInt() e readString().

Comentei o código em inglês com um inglês enferrujado.

Deixo então o código.

/*
Developer : Tiago Palhota ( Gurzi )
Chapter : Streams ( Using Tokens -> StreamTokenizer )
Date : 31.07.2007
Code Destination : www.portugal-a-programar.org

*/


import java.io.*;

public class tiago
{
int ttype;
StreamTokenizer dataIn =  new StreamTokenizer( new BufferedReader( new InputStreamReader( System.in ) ) );  
// a method holder for token

private int readToken()
{

	// Lets try to read the nextToken coming from dataIn

	try
	{
		ttype = dataIn.nextToken(); // nextToken returns a int value -> ttype
		return ttype;
	}
	catch( IOException e) //if anything goes wrong
	{
		System.err.println( System.err );
		System.exit(1);
	}
return 0;
}

// a public method to read integers

public int readInt()
{
	// we will give 5 opportunities to client write integers

	for( int i = 0; i < 5; i++)
	{
		if( readToken() == dataIn.TT_NUMBER )
		 {

			return (int) dataIn.nval;
		}
		 else
		  {
			 System.out.println(" \n\n You introduced a non integer, please respect the laws of this product , you used " + (i+1) + "/5 opportunites , beware");
			continue; // Retry to read operation
		  }
	   }
		System.out.println("\n\nYou used all the possibilites to enter an integer! QUITTING..... \n\n");
		System.exit(1);
		return 0;

}

public String readString()
{

	for(int i = 0; i < 5; i++)
	{
		System.out.println(" Please enter one String to be read\n\n");
			if(readToken()  == dataIn.TT_WORD ) // TT.WORD says that a token is a word
				return ( String) dataIn.sval;
			else
				System.out.println(" You chose to read String but are entering a non acceptable key, try again please \n\n");
				continue;
	}
	System.out.println("\n\nYou failed 5 times , exiting, sorry...\n\n");
	return null;
}



public static void main(String[] args)
{
	tiago teste =  new tiago();
	System.out.println("Welcome to my test program");
	System.out.println("\n\n1- I want to read an Integer\n\n2-I want to read a String\n\n3-Exit\n\n");

	switch( teste.readInt() )
	{
		case 1: System.out.println(teste.readInt());
		case 2: System.out.println(teste.readString());
		case 3: System.exit(1);
		default : System.out.println("Uppss, something went wrong");
	}

}
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora