Java

Friday, May 12, 2006

 

Tokens

Java nos fornece pelo menos três maneiras distintas de lidar com tokens. A classe String contém o método split(), por meio do qual dividimos um objeto String em tokens. Por default, o método split() usa o espaço em branco como delimitador, mas podemos passar como argumento qualquer expressão regex.

String s = "bla bla bla bla";
String token [] = s.split();

token receberá um vetor de tamanho quatro, contendo os tokens bla, bla, bla e bla.

String s = "a3 5aab5haf"
String token [] = s.split("\\d");

Agora usamos um dígito como delimitador. O resultado será também um vetor de tamanho quatro, contendo os tokens "a", " ", "aab", "haf".

A classe StringTokenizer nos fornece outra maneira de obter os tokens a partir de um objeto String. Ambas as construções abaixo são possíveis:

String s = "a3 5aab5haf"
StringTokenizer st = new StringTokenizer(s);
StringTokenizer st2 = new StringTokenizer(s, "\\d");

A primeira construção utiliza um delimitador padrão, que também é o espaço em branco. A segunda construção permite que se passe para o construtor o delimitador a ser utilizado. Para iterar entre os tokens, usamos o método hasMoreTokens(), para saber se há um novo token e nextToken() para obter o próximo token.

while (st.hasMoreTokens()){
System.out.println(st.nextToken());
}


A partir do java 1.5, temos mais uma maneira de lidar com tokens, fornecida pela classe Scanner. Seu construtor aceita tanto uma String quanto um InputStream ou mesmo um arquivo (File).

String s = "a3 5aab5haf"
Scanner scan = new Scanner(s);
File arq = new File("arquivo.txt");
scan = new Scanner(arq);

A classe Scanner fornece os métodos gerais hasNext() e next() para verificar se há mais tokens e retornar o próximo token, como um objeto String. Ela fornece também métodos mais especificos, como hasNextBoolean() ou hasNextInt() e os respectivos métodos de obtenção, nextBoolean(), nextInt() etc. Por default, a classe Scanner também usa o espaço em branco como delimitador.

Comments: Post a Comment



<< Home

Archives

March 2006   April 2006   May 2006   July 2006   August 2006  

This page is powered by Blogger. Isn't yours?