En Java el StreamTokenizer classe està present a la paquet java.io . S'utilitza per analitzar un flux d'entrada dividint-lo en petits trossos coneguts com a fitxes aquestes fitxes faciliten el processament. Un testimoni pot ser una paraula, un nombre o qualsevol símbol específic. Stream Tokenizer pot reconèixer cadenes entre cometes i diversos estils de comentaris.
Característiques de la classe StreamTokenizer:
Les característiques principals de la classe StreamTokenizer s'enumeren a continuació:
- Desglossa els fluxos d'entrada en fitxes com símbols, paraules i números.
- Admet el seguiment dels números de línia.
- Pot tractar els caràcters de final de línia com a fitxes.
- També pot convertir les fitxes de paraules en minúscules automàticament.
Declaració de la classe StreamTokenizer
La declaració de la classe StreamTokenizer és:
La classe pública StreamTokenizer amplia Objecte implementa Serializable
Nota: Amplia Object i implementa Serializable.
Constructors de la classe StreamTokenizer
Aquesta classe consta de dos constructors amb l'ajuda dels quals podem crear objectes d'aquesta classe de diferents maneres. Els constructors disponibles en aquesta classe són els següents:
1. StreamTokenizer (InputStream és): Aquest constructor és obsolet . És una manera antiga de crear un tokenitzador directament des d'un flux de bytes.
Sintaxi:
StreamTokenizer (InputStream és)
Nota: Això no es recomana perquè funciona en bytes i no en caràcters.
2. StreamTokenizer (Lector r): Aquesta és la millor manera de crear un tokenizer, ja que utilitza un flux de caràcters que gestiona el text correctament.
Sintaxi:
StreamTokenizer (Lector r)
Exemple:
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); } } } }
Sortida
Word: Hello Number: 123.0
Mètodes Java StreamTokenizer
La taula següent mostra els mètodes d'aquesta classe.
| Mètode | Descripció |
|---|---|
| commentChar() | Especifica que el caràcter ch inicia un comentari d'una sola línia. S'ignoren tots els caràcters des del caràcter de comentari fins al final de la línia. |
| línia () | Retorna el número de línia actual del flux d'entrada. |
| toString() | Retorna una representació de cadena del testimoni de flux actual i el número de línia que apareix. |
eolIsSignificant (bandera booleana) | Determina si els caràcters de final de línia es tracten com a testimonis significatius. Si els caràcters reals de final de línia es tornen com a testimonis. |
| ordinaryChar(int ch) | Especifica que el caràcter ch es tracta com un caràcter normal i no com un número de paraula o caràcter de comentari. |
| nextToken() | Analitza el següent testimoni del flux d'entrada i retorna el seu tipus. |
| LowCaseMode() | Determina si els testimonis de paraula es converteixen automàticament a minúscules. |
| ordinaryChar() | Especifica que el caràcter ch es tracta com un caràcter normal. |
| caràcters ordinaris () | Especifica que tots els caràcters de l'interval de baix a alt es tracten com a caràcters normals. |
Ara parlarem de cada mètode un per un en detall:
1. commentChar(): Aquest mètode s'utilitza per especificar el caràcter cap que comença amb el comentari d'una sola línia i StreamTokenizer no reconeix tots els caràcters des d'aquest caràcter fins al final de la línia.
Sintaxi:
public void commentChar(int ch)
- Paràmetre: Aquest mètode pren un únic valor enter cap després d'això, tots els personatges són ignorats
- Tipus de retorn: Aquest mètode no retorna res.
Exemple:
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; } } } }
Sortida:
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: Aquest programa no s'executarà correctament perquè el fitxer 'ABC.txt' no existeix. Si volem provar el codi al sistema només hem de crear el nom del fitxer ABC.txt.
Creeu un fitxer ABC.txt amb el contingut següent que es mostra a continuació:
Programadors 1 2 3 Geeks Hola, aquí s'explica un programa amics meus.
convertir de cadena a nombre enter java
2. línia(): Aquest mètode retorna el número de línia actual que processa el StreamTokenizer. Aquest mètode és molt útil quan volem comprovar com funciona el processament depura el programa i també podem fer un seguiment dels números de línia durant el temps de tokenització.
Sintaxi:
public int linen()
- Paràmetre: Aquest mètode no pren cap paràmetre.
- Tipus de retorn: Aquest mètode retorna un valor int el número de línia del flux d'entrada actual.
Exemple:
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; } } } }
Sortida:
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(): Aquest mètode retorna una cadena que representa el testimoni de flux actual amb el valor del testimoni i el número de línia que està utilitzant actualment.
Sintaxi:
Public String toString()
- Paràmetre: Aquest mètode no pren cap paràmetre.
- Tipus de retorn: Aquest mètode retorna un valor de cadena que representa el testimoni de flux actual amb el número de línia.
Exemple:
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; } } } }
Sortida:
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(): Aquest mètode no retorna res, però s'utilitza per comprovar si el caràcter EOL (Fi de línia) s'ha de tokenitzar. Si el senyalador és cert, llavors cada caràcter de final de línia es tracta com un testimoni i se li assigna el tipus de testimoni TT_EOL, el caràcter eol s'ignora es tracta com a espai en blanc.
Sintaxi:
public void eolIsSignificant (bandera booleana)
- Paràmetre: Aquest mètode pren un booleà bandera si és cert, el caràcter de final de línia es tracta com a testimoni a o s'ignora com a espai en blanc.
- Tipus de retorn: Aquest mètode no retorna res.
Exemple:
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; } } } }
Sortida:
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: Aquest programa no s'executarà correctament perquè el fitxer 'ABC.txt' no existeix. Si volem provar el codi al sistema només hem de crear el nom del fitxer ABC.txt.
Creeu un fitxer ABC.txxt amb el contingut següent que es mostra a continuació:
1 Geeks 2 Per a 3 Geeks
5. nextToken(): Aquest mètode llegeix el següent testimoni del flux d'entrada i retorna el tipus. El tipus de testimoni s'emmagatzema al fitxer ttype camp. Retorna el tipus com a valor enter que pot ser TT_WORD TT_NUMBER i TT_EOL, etc.
Sintaxi:
public int nextToken()
- Paràmetre: Aquest mètode no pren cap paràmetre.
- Tipus de retorn: Aquest mètode retorna el int valor del tipus de testimoni.
Exemple:
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; } } } }
Sortida:
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: Aquest programa no s'executarà correctament perquè el fitxer 'ABC.txt' no existeix. Si volem provar el codi al sistema només hem de crear el nom del fitxer ABC.txt.
Creeu un fitxer ABC.txt amb el contingut següent que es mostra a continuació:
1 Aquest programa informa a 2 sobre l'ús del mètode 3 next token().
6. lowerCaseMod(): Aquest mètode pren un booleà bandera valor i comprova si el testimoni s'ha de convertir automàticament a minúscules. Si la bandera és certa, totes les paraules del testimoni es converteixen en minúscules o, en cas contrari, les fitxes s'estableixen tal com són i no es volen convertir.
Sintaxi:
convertint int a doble java
public void lowerCaseMode (bandera booleana)
- Paràmetre: Es necessita un booleà bandera valor. Si és cert, tots els fitxes es converteixen en minúscules i si és fals, no es convertiran.
- Tipus de retorn: Aquest mètode no retorna res.
Exemple:
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; } } } }
Sortida:
Word : hello
Word : geeks
Word : this
Word : is
Word : about
Word : lowercasemode
Nota: Aquest programa no s'executarà correctament perquè el fitxer 'ABC.txt' no existeix. Si volem provar el codi al sistema només hem de crear el nom del fitxer ABC.txt.
Creeu un fitxer ABC.txt amb el contingut següent que es mostra a continuació:
Hola geeks, es tracta de LowerCaseMode ()
7. ordinaryChar(): Aquest mètode pren un valor int cap s'ha de tractar com un personatge. Mitjançant aquest mètode podem tractar a caràcter a com a caràcter especial com una paraula numèrica o un espai en blanc.
Sintaxi:
programació r en c
public void ordinaryChar(int ch)
- Paràmetre: Aquest mètode pren un sol int cap valor que es tractarà com un personatge.
- Tipus de retorn: Aquest mètode no retorna res.
Exemple:
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; } } } }
Sortida:
Word : Hello
Word : Geek
Word : Thi
Word : I
Word : zz
Word : About
Word : ordinaryChar
Nota: Aquest programa no s'executarà correctament perquè el fitxer 'ABC.txt' no existeix. Si volem provar el codi al sistema només hem de crear el nom del fitxer ABC.txt.
Creeu un fitxer ABC.txt amb el contingut següent que es mostra a continuació:
Hola Geeks Thissss Issszz Quant a ordinaryChar() Aquest mètode ha eliminat "s" de tot el flux
8. caràcters ordinaris(): Aquest mètode especifica que tots els caràcters del rang de baix a alt (inclòs) es tractaran com a caràcters normals i després de cridar aquest mètode, els caràcters ja no es tractaran com a caràcters especials.
Sintaxi:
public void ordinaryChars (int low int high)
- Paràmetre: Aquest mètode pren dos valors enters baix i alt ( inclòs) el rang del caràcter que es converteix en un caràcter especial.
- Tipus de retorn: Aquest mètode no retorna res.
Exemple:
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; } } } }
Sortida:
Word : Hello
Word : Geeks
Word : This
Word : is
Word : out
Word : ordin
Word : ryCh
Word : rs
Nota: Aquest programa no s'executarà correctament perquè el fitxer 'ABC.txt' no existeix. Si volem provar el codi al sistema només hem de crear el nom del fitxer ABC.txt.
Creeu un fitxer ABC.txt amb el contingut següent que es mostra a continuació:
Hola Geeks Això és sobre ordinaryChars ()
Ús de StreamTokenizer per tokenitzar un fitxer de text
La classe StreamTokenizer també s'utilitza per tokenitzar el fitxer de text i aquí estem utilitzant els mètodes de la classe Tokenizer.
Pas 1: Primer creeu un fitxer de text amb .txt extensió al mateix directori arrel. Aquí l'hem creat amb el nom Geeks.txt .
Pas 2: Ara creeu un fitxer Java i escriviu el codi per tokenitzar les dades de text presents al fitxer de text.
Fitxer 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; } } } }
Sortida:
Estructura de carpetes:
Article següent – Classe Java.io.StreamTokenizer a Java | Set 2