En Java el StreamTokenizador La clase está presente en el paquete java.io . Se utiliza para analizar un flujo de entrada dividiéndolo en pequeños fragmentos conocidos como fichas Estos tokens facilitan el procesamiento. Un token puede ser una palabra, un número o cualquier símbolo específico. Stream Tokenizer puede reconocer números entrecomillados y varios estilos de comentarios.
Características de la clase StreamTokenizer:
Las características clave de la clase StreamTokenizer se enumeran a continuación:
- Divide los flujos de entrada en tokens como símbolos, palabras y números.
- Admite números de línea de seguimiento.
- Puede tratar los caracteres de final de línea como tokens.
- También puede convertir tokens de palabras a minúsculas automáticamente.
Declaración de clase StreamTokenizer
La declaración de la clase StreamTokenizer es:
la clase pública StreamTokenizer extiende el objeto implementa serializable
Nota: Extiende Object e implementa Serializable.
Constructores de la clase StreamTokenizer
Esta clase consta de dos constructores con la ayuda de los cuales podemos crear objetos de esta clase de diferentes maneras. Los siguientes son los constructores disponibles en esta clase:
1. StreamTokenizer (InputStream es): Este constructor es obsoleto . Es una forma más antigua de crear un tokenizador directamente a partir de un flujo de bytes.
Sintaxis:
StreamTokenizer (InputStream es)
Nota: Esto no se recomienda porque funciona con bytes, no con caracteres.
2. StreamTokenizer (Lector r): Esta es la mejor manera de crear un tokenizador: utiliza una secuencia de caracteres que maneja el texto correctamente.
Sintaxis:
StreamTokenizer(Lector r)
Ejemplo:
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); } } } }
Producción
Word: Hello Number: 123.0
Métodos de Java StreamTokenizer
La siguiente tabla muestra los métodos de esta clase.
| Método | Descripción |
|---|---|
| comentarioChar() | Especifica que el carácter ch inicia un comentario de una sola línea. Se ignoran todos los caracteres desde el carácter del comentario hasta el final de la línea. |
| línea() | Devuelve el número de línea actual del flujo de entrada. |
| a cadena() | Devuelve una representación de cadena del token de transmisión actual y el número de línea en el que ocurre. |
eolIsSignificant (bandera booleana) | Determina si los caracteres de final de línea se tratan como tokens importantes. Si se devuelven caracteres verdaderos de fin de línea como tokens. |
| carácter ordinario (int ch) | Especifica que el carácter ch se trata como un carácter normal, no como un número de palabra o un carácter de comentario. |
| siguienteToken() | Analiza el siguiente token del flujo de entrada y devuelve su tipo. |
| modo de mayúsculas minúscula() | Determina si los tokens de palabras se convierten automáticamente a minúsculas. |
| carácter ordinario() | Especifica que el carácter ch se trata como un carácter normal. |
| caracteres ordinarios() | Especifica que todos los caracteres en el rango de bajo a alto se tratan como caracteres normales. |
Ahora vamos a discutir cada método uno por uno en detalle:
1. comentarioChar(): Este método se utiliza para especificar el carácter. ch que comienza en un comentario de una sola línea y StreamTokenizer no reconoce todos los caracteres desde este carácter hasta el final de la línea.
Sintaxis:
comentario público vacíoChar(int ch)
- Parámetro: Este método toma un único valor entero. ch después de eso todos los personajes son ignorados
- Tipo de devolución: Este método no devuelve nada.
Ejemplo:
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; } } } }
Producción:
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.
Nota: Este programa no se ejecutará correctamente porque el archivo 'ABC.txt' no existe. Si queremos probar el código en el sistema, simplemente necesitamos crear el nombre de archivo ABC.txt.
Cree un archivo ABC.txt con el siguiente contenido que se enumera a continuación:
Programadores 1 2 3 Geeks Hola, aquí se explica un programa, amigos.
2. línea(): Este método devuelve el número de línea actual que procesa StreamTokenizer. Este método es muy útil cuando queremos comprobar cómo funciona el procesamiento, depurar el programa y también podemos rastrear los números de línea durante el tiempo de tokenización.
Sintaxis:
¿Cuándo se inventó la primera computadora?
ropa interior pública ()
- Parámetro: Este método no toma ningún parámetro.
- Tipo de devolución: Este método devuelve un valor int el número de línea del flujo de entrada actual.
Ejemplo:
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; } } } }
Producción:
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
tipos de datos primitivos en java
3. toString(): Este método devuelve una cadena que representa el token de transmisión actual con el valor del token y el número de línea que está utilizando actualmente.
Sintaxis:
cadena pública a cadena ()
- Parámetro: Este método no toma ningún parámetro.
- Tipo de devolución: Este método devuelve un valor de cadena que representa el token de transmisión actual con el número de línea.
Ejemplo:
Java// 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; } } } }
Producción:
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 no devuelve nada, pero se utiliza para comprobar si el carácter EOL (fin de línea) debe tokenizarse. Si la bandera es verdadera, entonces cada carácter de fin de línea se trata como un token y se le asigna el tipo de token TT_EOL. El carácter eol que se ignora se trata como un espacio en blanco.
Sintaxis:
eolIsSignificant vacío público (bandera booleana)
- Parámetro: Este método toma un valor booleano. bandera si es verdadero, el carácter de final de línea se trata como un token o se ignora como un espacio en blanco.
- Tipo de devolución: Este método no devuelve nada.
Ejemplo:
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; } } } }
Producción:
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
Nota: Este programa no se ejecutará correctamente porque el archivo 'ABC.txt' no existe. Si queremos probar el código en el sistema, simplemente necesitamos crear el nombre de archivo ABC.txt.
Cree un archivo ABC.txxt con el siguiente contenido que se enumera a continuación:
1 frikis 2 por 3 frikis
5. siguienteToken(): Este método lee el siguiente token del flujo de entrada y devuelve el tipo. El tipo de token se almacena en el tipo campo. Devuelve el tipo como un valor entero que puede ser TT_WORD TT_NUMBER y TT_EOL, etc.
Sintaxis:
público int nextToken()
- Parámetro: Este método no toma ningún parámetro.
- Tipo de devolución: Este método devuelve el entero valor del tipo de token.
Ejemplo:
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; } } } }
Producción:
Word : This
Word : program
Word : tells
Number : 2.0
Word : about
Word : use
Word : of
Number : 3.0
Word : next
Word : token
Word : method
Nota: Este programa no se ejecutará correctamente porque el archivo 'ABC.txt' no existe. Si queremos probar el código en el sistema, simplemente necesitamos crear el nombre de archivo ABC.txt.
Cree un archivo ABC.txt con el siguiente contenido que se enumera a continuación:
1 Este programa informa a 2 sobre el uso del método 3 next token()
6. lowerCaseMod(): Este método toma un valor booleano. bandera valor y comprueba si el token debe convertirse automáticamente a minúsculas. Si la bandera es verdadera, todas las palabras del token se convierten a minúsculas o, de lo contrario, los tokens se configuran como están y no se desean convertir.
Sintaxis:
modo público vacío en minúsculas (bandera booleana)
- Parámetro: Se necesita un booleano bandera valor. Si es verdadero, todos los tokens se convierten a minúsculas y, si es falso, no se convertirán.
- Tipo de devolución: Este método no devuelve nada.
Ejemplo:
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; } } } }
Producción:
Word : hello
Word : geeks
Word : this
Word : is
Word : about
Word : lowercasemode
Nota: Este programa no se ejecutará correctamente porque el archivo 'ABC.txt' no existe. Si queremos probar el código en el sistema, simplemente necesitamos crear el nombre de archivo ABC.txt.
Cree un archivo ABC.txt con el siguiente contenido que se enumera a continuación:
Hola geeks, esto es sobre LowerCaseMode()
7. carácter ordinario(): Este método toma un valor int. ch debe ser tratado como un personaje. Con este método podemos tratar una personaje a como carácter especial como una palabra numérica o un espacio en blanco.
Sintaxis:
público vacío ordinarioChar(int ch)
- Parámetro: Este método toma un solo int ch valor que será tratado como un carácter.
- Tipo de devolución: Este método no devuelve nada.
Ejemplo:
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; } } } }
Producción:
Word : Hello
Word : Geek
Word : Thi
Word : I
Word : zz
Word : About
Word : ordinaryChar
Nota: Este programa no se ejecutará correctamente porque el archivo 'ABC.txt' no existe. Si queremos probar el código en el sistema, simplemente necesitamos crear el nombre de archivo ABC.txt.
Cree un archivo ABC.txt con el siguiente contenido que se enumera a continuación:
Hola geeks Thissss Issszz Acerca de commonChar() Este método ha eliminado 's' de toda la transmisión
8. caracteres ordinarios(): Este método especifica que todos los caracteres en el rango de bajo a alto (inclusive) se tratarán como caracteres normales y, después de llamar a este método, los caracteres ya no se tratarán como caracteres especiales.
Sintaxis:
cambiar la programación java
caracteres ordinarios vacíos públicos (int bajo int alto)
- Parámetro: Este método toma dos valores enteros. bajo y alto ( inclusive) el rango del carácter que se convierte en un carácter especial.
- Tipo de devolución: Este método no devuelve nada.
Ejemplo:
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; } } } }
Producción:
Word : Hello
Word : Geeks
Word : This
Word : is
Word : out
Word : ordin
Word : ryCh
Word : rs
Nota: Este programa no se ejecutará correctamente porque el archivo 'ABC.txt' no existe. Si queremos probar el código en el sistema, simplemente necesitamos crear el nombre de archivo ABC.txt.
Cree un archivo ABC.txt con el siguiente contenido que se enumera a continuación:
Hola geeks. Esto es sobre caracteres ordinarios().
Uso de StreamTokenizer para tokenizar un archivo de texto
La clase StreamTokenizer también se usa para tokenizar el archivo de texto y aquí estamos usando los métodos de la clase Tokenizer.
Paso 1: Primero cree un archivo de texto con .TXT extensión en el mismo directorio raíz. Aquí lo creamos con el nombre. Frikis.txt .
Paso 2: Ahora cree un archivo Java y escriba el código para tokenizar los datos de texto presentes en el archivo de texto.
Archivo 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; } } } }
Producción:
Estructura de carpetas:
Artículo siguiente – Clase Java.io.StreamTokenizer en Java | Conjunto 2