Em Java o StreamTokenizer aula está presente no pacote java.io . É usado para analisar um fluxo de entrada, dividindo-o em pequenos pedaços conhecidos como fichas esses tokens facilitam o processamento. Um token pode ser uma palavra, um número ou qualquer símbolo específico. O Stream Tokenizer pode reconhecer strings entre números e vários estilos de comentários.
Recursos da classe StreamTokenizer:
sistema operacional
Os principais recursos da classe StreamTokenizer estão listados abaixo:
- Ele divide os fluxos de entrada em tokens, como símbolos, palavras e números.
- Ele suporta números de linha de rastreamento.
- Ele pode tratar caracteres de fim de linha como tokens.
- Ele também pode converter tokens de palavras em minúsculas automaticamente.
Declaração da classe StreamTokenizer
A declaração da classe StreamTokenizer é:
classe pública StreamTokenizer estende objeto implementa serializável
Observação: Ele estende Object e implementa Serializable.
Construtores da classe StreamTokenizer
Esta classe consiste em dois construtores com os quais podemos criar objetos desta classe de diferentes maneiras. A seguir estão os construtores disponíveis nesta classe:
1. StreamTokenizer (InputStream é): Este construtor é obsoleto . É uma maneira mais antiga de criar um tokenizer diretamente de um fluxo de bytes.
Sintaxe:
StreamTokenizer (InputStream é)
Observação: Isso não é recomendado porque funciona em bytes e não em caracteres.
2. StreamTokenizer (Leitor r): Esta é a melhor maneira de criar tokenizer, pois usa um fluxo de caracteres que manipula o texto corretamente.
Sintaxe:
StreamTokenizer(Leitor r)
Exemplo:
Java// Demonstrating the working // of StreamTokenizer(Reader r) import java.io.*; public class Geeks { public static void main(String[] args) throws IOException { Reader r = new StringReader('Hello 123'); StreamTokenizer t = new StreamTokenizer(r); int token; while ((token = t.nextToken()) != StreamTokenizer.TT_EOF) { if (token == StreamTokenizer.TT_WORD) { System.out.println('Word: ' + t.sval); } else if (token == StreamTokenizer.TT_NUMBER) { System.out.println('Number: ' + t.nval); } } } }
Saída
Word: Hello Number: 123.0
Métodos Java StreamTokenizer
A tabela abaixo demonstra os métodos desta classe.
| Método | Descrição |
|---|---|
| comentarChar() | Especifica que o caractere ch inicia um comentário de linha única. Todos os caracteres do comentário até o final da linha são ignorados. |
| linha() | Retorna o número da linha atual do fluxo de entrada. |
| toString() | Retorna uma representação de string do token de fluxo atual e o número da linha em que ele ocorre. |
eolIsSignificant(sinalizador booleano) | Determina se os caracteres de fim de linha são tratados como tokens significativos. Se os caracteres de fim de linha verdadeiros forem retornados como tokens. |
| ordinárioChar(int ch) | Especifica que o caractere ch é tratado como um caractere comum e não como um número de palavra ou caractere de comentário. |
| próximoToken() | Analisa o próximo token do fluxo de entrada e retorna seu tipo. |
| lowerCaseMode() | Determina se os tokens de palavras são convertidos automaticamente em letras minúsculas. |
| char comum() | Especifica que o caractere ch é tratado como um caractere comum. |
| caracteres comuns() | Especifica que todos os caracteres no intervalo inferior a superior serão tratados como caracteres comuns. |
Agora vamos discutir cada método, um por um, em detalhes:
1. comentárioChar(): Este método é usado para especificar o caractere cap. que começa no comentário de uma única linha e todos os caracteres desse caractere até o final da linha não são reconhecidos pelo StreamTokenizer.
Sintaxe:
comentário vazio públicoChar(int ch)
- Parâmetro: Este método assume um único valor inteiro cap. depois disso todos os personagens são ignorados
- Tipo de retorno: Este método não retorna nada.
Exemplo:
Java// Demonstrating the working of commentChar() method import java.io.*; public class Geeks { public static void main(String[] args) throws IOException { FileReader reader = new FileReader('ABC.txt'); BufferedReader bufferread = new BufferedReader(reader); StreamTokenizer token = new StreamTokenizer(bufferread); // Use of commentChar() method token.commentChar('a'); int t; while ((t = token.nextToken()) != StreamTokenizer.TT_EOF) { switch (t) { case StreamTokenizer.TT_NUMBER: System.out.println('Number : ' + token.nval); break; case StreamTokenizer.TT_WORD: System.out.println('Word : ' + token.sval); break; } } } }
Saída:
Word : Programmers
Number : 1.0
Number : 2.0
Number : 3.0
Word : Geeks
Word : Hello
Word : a
Word : Program
Word : is
Word : explained
Word : here
Word : my
Word : friends.
Observação: Este programa não será executado com sucesso porque o arquivo 'ABC.txt' não existe. Se quisermos testar o código no sistema, basta criar o nome do arquivo ABC.txt.
Crie um arquivo ABC.txt com o seguinte conteúdo listado abaixo:
Programadores 1 2 3 Geeks Olá um programa é explicado aqui meus amigos.
2. linha(): Este método retorna o número da linha atual que é processado pelo StreamTokenizer. Este método é muito útil quando queremos verificar como funciona o processamento de depuração do programa e também podemos rastrear os números das linhas durante o tempo de tokenização.
Sintaxe:
público int linho()
- Parâmetro: Este método não aceita nenhum parâmetro.
- Tipo de retorno: Este método retorna um valor int o número da linha do fluxo de entrada atual.
Exemplo:
Java// Demonstrating the use of lineno() method import java.io.*; public class Geeks { public static void main(String[] args) throws InterruptedException FileNotFoundException IOException { FileReader reader = new FileReader('ABC.txt'); BufferedReader bufferread = new BufferedReader(reader); StreamTokenizer token = new StreamTokenizer(bufferread); token.eolIsSignificant(true); // Use of lineno() method // to get current line no. System.out.println('Line Number:' + token.lineno()); token.commentChar('a'); int t; while ((t = token.nextToken()) != StreamTokenizer.TT_EOF) { switch (t) { case StreamTokenizer.TT_EOL: System.out.println(''); System.out.println('Line No. : ' + token.lineno()); break; case StreamTokenizer.TT_NUMBER: System.out.println('Number : ' + token.nval); break; case StreamTokenizer.TT_WORD: System.out.println('Word : ' + token.sval); break; } } } }
Saída:
Line Number:1
Word : Progr
Line No. : 2
Number : 1.0
Line No. : 3
Number : 2.0
Line No. : 4
Number : 3.0
Line No. : 5
Word : Geeks
Line No. : 6
Word : Hello
Line No. : 7
Word : This
Word : is
3. toString(): Este método retorna uma string que representa o token do stream atual com o valor do token e o número da linha que está usando atualmente.
Sintaxe:
String pública paraString()
- Parâmetro: Este método não aceita nenhum parâmetro.
- Tipo de retorno: Este método retorna um valor de string que representa o token do stream atual com o número da linha.
Exemplo:
quantos filmes de missão impossível existemJava
// Demonstrating the use of toString() method import java.io.*; public class Geeks { public static void main(String[] args) throws IOException { FileReader reader = new FileReader('ABC.txt'); BufferedReader bufferread = new BufferedReader(reader); StreamTokenizer token = new StreamTokenizer(bufferread); int t; while ((t = token.nextToken()) != StreamTokenizer.TT_EOF) { switch (t) { case StreamTokenizer.TT_NUMBER: System.out.println('Number : ' + token.nval); break; case StreamTokenizer.TT_WORD: System.out.println('Word : ' + token.toString()); break; } } } }
Saída:
Word : Token[Programmers] line 1
Number : 1.0
Number : 2.0
Number : 3.0
Word : Token[Geeks] line 5
Word : Token[Hello] line 6
Word : Token[a] line 7
Word : Token[Program] line 7
Word : Token[is] line 7
Word : Token[explained] line 7
Word : Token[here] line 7
Word : Token[my] line 7
Word : Token[friends.] line 7
4. eolIsSignificant(): Este método não retorna nada, mas é usado para verificar se o caractere EOL (fim de linha) deve ser tokenizado. Se o sinalizador for verdadeiro, cada caractere de fim de linha será tratado como um token e atribuído ao tipo de token TT_EOL. O caractere eol será ignorado e será tratado como espaço em branco.
Sintaxe:
public void eolIsSignificant(sinalizador booleano)
- Parâmetro: Este método usa um booleano bandeira se for verdade, o caractere de final de linha será tratado como um token ou ignorado como espaço em branco.
- Tipo de retorno: Este método não retorna nada.
Exemplo:
Java// Demonstrating the use of eolIsSignificant() method import java.io.*; public class Geeks { public static void main(String[] args) throws InterruptedException FileNotFoundException IOException { FileReader reader = new FileReader('ABC.txt'); BufferedReader bufferread = new BufferedReader(reader); StreamTokenizer token = new StreamTokenizer(bufferread); boolean arg = true; // Use of eolIsSignificant() method token.eolIsSignificant(arg); // Here the 'arg' is set true so EOL is treated as a token int t; while ((t = token.nextToken()) != StreamTokenizer.TT_EOF) { switch (t) { case StreamTokenizer.TT_EOL: System.out.println('End of Line encountered.'); break; case StreamTokenizer.TT_NUMBER: System.out.println('Number : ' + token.nval); break; case StreamTokenizer.TT_WORD: System.out.println('Word : ' + token.sval); break; } } } }
Saída:
Number : 1.0
End of Line encountered.
Word : Geeks
End of Line encountered.
Number : 2.0
End of Line encountered.
Word : For
End of Line encountered.
Number : 3.0
End of Line encountered.
Word : Geeks
Observação: Este programa não será executado com sucesso porque o arquivo 'ABC.txt' não existe. Se quisermos testar o código no sistema, basta criar o nome do arquivo ABC.txt.
Crie um arquivo ABC.txxt com o seguinte conteúdo listado abaixo:
1 Geeks 2 Para 3 Geeks
5. próximoToken(): Este método lê o próximo token do fluxo de entrada e retorna o tipo. O tipo do token é armazenado no tipo campo. Ele retorna o tipo como um valor inteiro que pode ser TT_WORD TT_NUMBER e TT_EOL e etc.
Sintaxe:
público int nextToken()
- Parâmetro: Este método não aceita nenhum parâmetro.
- Tipo de retorno: Este método retorna o interno valor do tipo de token.
Exemplo:
Java// Demonstrating the use of nextToken() method import java.io.*; public class Geeks { public static void main(String[] args) throws InterruptedException FileNotFoundException IOException { FileReader reader = new FileReader('ABC.txt'); BufferedReader bufferread = new BufferedReader(reader); StreamTokenizer token = new StreamTokenizer(bufferread); // Use of nextToken() method to parse Next Token from the Input Stream int t = token.nextToken(); while ((t = token.nextToken()) != StreamTokenizer.TT_EOF) { switch (t) { case StreamTokenizer.TT_NUMBER: System.out.println('Number : ' + token.nval); break; case StreamTokenizer.TT_WORD: System.out.println('Word : ' + token.sval); break; } } } }
Saída:
Word : This
Word : program
Word : tells
Number : 2.0
Word : about
Word : use
Word : of
Number : 3.0
Word : next
Word : token
Word : method
Observação: Este programa não será executado com sucesso porque o arquivo 'ABC.txt' não existe. Se quisermos testar o código no sistema, basta criar o nome do arquivo ABC.txt.
Crie um arquivo ABC.txt com o seguinte conteúdo listado abaixo:
1 Este programa informa 2 sobre o uso do método 3 next token()
6. lowerCaseMod(): Este método usa um booleano bandeira valor e verifica se o token deve ser convertido automaticamente para minúsculas. Se o sinalizador for verdadeiro, todas as palavras do token serão convertidas para minúsculas ou, caso contrário, os tokens serão definidos como estão e não serão desejados convertê-los.
Sintaxe:
public void lowerCaseMode (sinalizador booleano)
- Parâmetro: É preciso um booleano bandeira valor. Se for verdadeiro, todos os tokens serão convertidos para letras minúsculas e, se for falso, não serão convertidos.
- Tipo de retorno: Este método não retorna nada.
Exemplo:
Java// Demonstrating the use of lowerCaseMode() method import java.io.*; public class NewClass { public static void main(String[] args) throws InterruptedException FileNotFoundException IOException { FileReader reader = new FileReader('ABC.txt'); BufferedReader bufferread = new BufferedReader(reader); StreamTokenizer token = new StreamTokenizer(bufferread); // Use of lowerCaseMode() method to //Here the we have set the Lower Case Mode ON boolean arg = true; token.lowerCaseMode(arg); int t; while ((t = token.nextToken()) != StreamTokenizer.TT_EOF) { switch (t) { case StreamTokenizer.TT_NUMBER: System.out.println('Number : ' + token.nval); break; case StreamTokenizer.TT_WORD: System.out.println('Word : ' + token.sval); break; } } } }
Saída:
Word : hello
Word : geeks
Word : this
Word : is
Word : about
Word : lowercasemode
Observação: Este programa não será executado com sucesso porque o arquivo 'ABC.txt' não existe. Se quisermos testar o código no sistema, basta criar o nome do arquivo ABC.txt.
Crie um arquivo ABC.txt com o seguinte conteúdo listado abaixo:
Olá Geeks, trata-se de LowerCaseMode()
7. ordinárioChar(): Este método assume um valor int cap. deve ser tratado como um personagem. Usando este método podemos tratar um personagem um como caractere especial, como uma palavra numérica ou espaço em branco.
Sintaxe:
público vazio comumChar(int ch)
- Parâmetro: Este método leva um único int cap. valor que será tratado como um caractere.
- Tipo de retorno: Este método não retorna nada.
Exemplo:
Java// Demonstrating the use of ordinaryChar() method import java.io.*; public class Geeks { public static void main(String[] args) throws InterruptedException FileNotFoundException IOException { FileReader reader = new FileReader('ABC.txt'); BufferedReader bufferread = new BufferedReader(reader); StreamTokenizer token = new StreamTokenizer(bufferread); // Use of ordinaryChar() method // Here we have taken 's' as an ordinary character token.ordinaryChar('s'); int t; while ((t = token.nextToken()) != StreamTokenizer.TT_EOF) { switch (t) { case StreamTokenizer.TT_NUMBER: System.out.println('Number : ' + token.nval); break; case StreamTokenizer.TT_WORD: System.out.println('Word : ' + token.sval); break; } } } }
Saída:
Word : Hello
Word : Geek
Word : Thi
Word : I
Word : zz
Word : About
Word : ordinaryChar
Observação: Este programa não será executado com sucesso porque o arquivo 'ABC.txt' não existe. Se quisermos testar o código no sistema, basta criar o nome do arquivo ABC.txt.
Crie um arquivo ABC.txt com o seguinte conteúdo listado abaixo:
Olá Geeks Thissss Issszz Sobre ordinaryChar() Este método remove 's' de todo o Stream
8. caracteres comuns(): Este método especifica que todos os caracteres na faixa de menor a maior (inclusive) serão tratados como caracteres comuns e após chamar este método os caracteres não serão mais tratados como caracteres especiais.
Sintaxe:
public void ordináriaChars(int baixo int alto)
- Parâmetro: Este método leva dois valores inteiros baixo e alto ( inclusive) o intervalo do caractere que é convertido em um caractere especial.
- Tipo de retorno: Este método não retorna nada.
Exemplo:
Java// Demonstrating the use of ordinaryChars() method import java.io.*; public class Geeks { public static void main(String[] args) throws InterruptedException FileNotFoundException IOException { FileReader reader = new FileReader('ABC.txt'); BufferedReader bufferread = new BufferedReader(reader); StreamTokenizer token = new StreamTokenizer(bufferread); // Use of ordinaryChars() method // Here we have taken low = 'a' and high = 'c' token.ordinaryChars('a''c'); int t; while ((t = token.nextToken()) != StreamTokenizer.TT_EOF) { switch (t) { case StreamTokenizer.TT_NUMBER: System.out.println('Number : ' + token.nval); break; case StreamTokenizer.TT_WORD: System.out.println('Word : ' + token.sval); break; } } } }
Saída:
Word : Hello
Word : Geeks
Word : This
Word : is
Word : out
Word : ordin
Word : ryCh
Word : rs
Observação: Este programa não será executado com sucesso porque o arquivo 'ABC.txt' não existe. Se quisermos testar o código no sistema, basta criar o nome do arquivo ABC.txt.
Crie um arquivo ABC.txt com o seguinte conteúdo listado abaixo:
Olá Geeks, trata-se de OrdinaryChars()
conversão e conversão de tipo java
Usando StreamTokenizer para tokenizar um arquivo de texto
A classe StreamTokenizer também é usada para tokenizar o arquivo de texto e aqui estamos usando os métodos da classe Tokenizer.
Etapa 1: Primeiro crie um arquivo de texto com .TXT extensão no mesmo diretório raiz. Aqui nós criamos com o nome Geeks.txt .
Etapa 2: Agora crie um arquivo Java e escreva o código para tokenizar os dados de texto presentes no arquivo de texto.
Arquivo geeks.java:
Java// Java program to Tokenized the text // file data using StreamTokenizer methods import java.io.*; public class Geeks { public static void main(String[] args) throws InterruptedException FileNotFoundException IOException { FileReader reader = new FileReader('Geeks.txt'); BufferedReader bufferread = new BufferedReader(reader); StreamTokenizer token = new StreamTokenizer(bufferread); // Use of ordinaryChar() method // Here we have taken 's' as an ordinary character token.ordinaryChar('s'); int t; while ((t = token.nextToken()) != StreamTokenizer.TT_EOF) { switch (t) { case StreamTokenizer.TT_NUMBER: System.out.println('Number : ' + token.nval); break; case StreamTokenizer.TT_WORD: System.out.println('Word : ' + token.sval); break; } } } }
Saída:
Estrutura de pastas:
Próximo artigo – Classe Java.io.StreamTokenizer em Java | Conjunto 2