Op Java de StreamTokenizer klasse is aanwezig in de java.io-pakket . Het wordt gebruikt om een invoerstroom te ontleden door deze in kleine stukjes op te splitsen, ook wel bekend als tokens deze tokens vergemakkelijken de verwerking. Een token kan een woord, een getal of een specifiek symbool zijn. Stream Tokenizer kan tekenreeksen tussen aanhalingstekens en verschillende commentaarstijlen herkennen.
Kenmerken van de StreamTokenizer-klasse:
De belangrijkste kenmerken van de StreamTokenizer-klasse worden hieronder vermeld:
- Het verdeelt de invoerstromen in tokens zoals symbolen, woorden en cijfers.
- Het ondersteunt trackingregelnummers.
- Het kan tekens aan het einde van de regel als tokens behandelen.
- Het kan woordtokens ook automatisch naar kleine letters converteren.
Verklaring van StreamTokenizer-klasse
De declaratie van de StreamTokenizer-klasse is:
public class StreamTokenizer breidt Object-implementaties Serialiseerbaar uit
Opmerking: Het breidt Object uit en implementeert Serializable.
Constructeurs van de StreamTokenizer-klasse
Deze klasse bestaat uit twee constructors met behulp waarvan we op verschillende manieren objecten van deze klasse kunnen maken. De volgende constructors zijn beschikbaar in deze klasse:
1. StreamTokenizer (InputStream is): Deze constructeur is verouderd . Het is een oudere manier om rechtstreeks vanuit een bytestream een tokenizer te maken.
Syntaxis:
StreamTokenizer(InputStream is)
Opmerking: Dit wordt niet aanbevolen omdat het werkt met bytes en niet met karakters.
2. StreamTokenizer(Lezer r): Dit is de beste manier om een tokenizer te maken. Het gebruikt een tekenstroom die de tekst correct verwerkt.
Syntaxis:
StreamTokenizer(Lezer r)
Voorbeeld:
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); } } } }
Uitvoer
Word: Hello Number: 123.0
Java StreamTokenizer-methoden
De onderstaande tabel toont de methoden van deze klasse.
| Methode | Beschrijving |
|---|---|
| commentaarChar() | Specificeert dat het teken ch een commentaar van één regel begint. Alle tekens vanaf het commentaarteken tot het einde van de regel worden genegeerd. |
| lijn() | Retourneert het huidige regelnummer van de invoerstroom. |
| toString() | Retourneert een tekenreeksrepresentatie van het huidige stroomtoken en het regelnummer waarin het voorkomt. |
eolIsSignificant(booleaanse vlag) | Bepaalt of tekens aan het einde van de regel worden behandeld als significante tokens. Als echte einderegeltekens als tokens worden geretourneerd. |
| gewoonChar(int ch) | Specificeert dat het teken ch wordt behandeld als een gewoon teken en niet als een woordnummer of commentaarteken. |
| volgendeToken() | Parseert het volgende token uit de invoerstroom en retourneert het type ervan. |
| lowerCaseMode() | Bepaalt of woordtokens automatisch worden geconverteerd naar kleine letters. |
| gewoneChar() | Specificeert dat het teken ch als een gewoon teken wordt behandeld. |
| gewoneChars() | Specificeert dat alle tekens in het bereik van laag tot hoog als gewone tekens worden behandeld. |
Nu gaan we elke methode één voor één in detail bespreken:
1. commentaarChar(): Deze methode wordt gebruikt om het teken te specificeren ch die begint bij commentaar op één regel en al het teken vanaf dit teken tot het einde van de regel wordt niet herkend door StreamTokenizer.
Syntaxis:
Hoe geblokkeerde nummers op Android te vinden
openbaar ongeldig commentaarChar(int ch)
- Parameter: Deze methode neemt een enkele gehele waarde ch daarna worden alle karakters genegeerd
- Retourtype: Deze methode levert niets op.
Voorbeeld:
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; } } } }
Uitgang:
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.
Opmerking: Dit programma zal niet succesvol worden uitgevoerd omdat het bestand 'ABC.txt' niet bestaat. Als we de code op het systeem willen testen, hoeven we alleen maar de bestandsnaam ABC.txt aan te maken.
Maak een bestand ABC.txt met de volgende inhoud, die hieronder wordt vermeld:
Programmeurs 1 2 3 Geeks Hallo een programma wordt hier uitgelegd mijn vrienden.
2. regel(): Deze methode retourneert het huidige regelnummer dat wordt verwerkt door de StreamTokenizer. Deze methode is erg handig als we willen controleren hoe de verwerking werkt, het programma debuggen en we ook de regelnummers kunnen volgen tijdens de tokenisatie.
Syntaxis:
public int linnen()
- Parameter: Deze methode gebruikt geen enkele parameter.
- Retourtype: Deze methode retourneert een int-waarde, het regelnummer van de huidige invoerstroom.
Voorbeeld:
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; } } } }
Uitgang:
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(): Deze methode retourneert een tekenreeks die het huidige stroomtoken vertegenwoordigt met de tokenwaarde en het regelnummer dat momenteel wordt gebruikt.
Syntaxis:
openbare tekenreeks toString()
- Parameter: Deze methode gebruikt geen enkele parameter.
- Retourtype: Deze methode retourneert een tekenreekswaarde die het huidige stroomtoken met het regelnummer vertegenwoordigt.
Voorbeeld:
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; } } } }
Uitgang:
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(): Deze methode retourneert niets, maar wordt gebruikt om te controleren of het EOL-teken (End of Line) tokenize moet zijn. Als de vlag waar is, wordt elk teken aan het einde van de regel behandeld als een token en wordt het tokentype TT_EOL toegewezen. Het eol-teken wordt genegeerd en behandeld als witruimte.
Syntaxis:
publieke leegte eolIsSignificant(booleaanse vlag)
- Parameter: Voor deze methode is een Booleaanse waarde nodig vlag Als het waar is, wordt het teken aan het einde van de regel behandeld als een token of genegeerd als witruimte.
- Retourtype: Deze methode levert niets op.
Voorbeeld:
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; } } } }
Uitgang:
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
Opmerking: Dit programma zal niet succesvol worden uitgevoerd omdat het bestand 'ABC.txt' niet bestaat. Als we de code op het systeem willen testen, hoeven we alleen maar de bestandsnaam ABC.txt aan te maken.
Maak een bestand ABC.txxt met de volgende inhoud, die hieronder wordt vermeld:
1 Geeks 2 Voor 3 Geeks
netwerklaag in computernetwerken
5. volgendeToken(): Deze methode leest het volgende token uit de invoerstroom en retourneert het type. Het type token wordt opgeslagen in de ttype veld. Het retourneert het type als een geheel getal, dat TT_WORD, TT_NUMBER en TT_EOL en etc. kan zijn.
Syntaxis:
public int nextToken()
- Parameter: Deze methode gebruikt geen enkele parameter.
- Retourtype: Deze methode retourneert de int waarde van het tokentype.
Voorbeeld:
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; } } } }
Uitgang:
Word : This
Word : program
Word : tells
Number : 2.0
Word : about
Word : use
Word : of
Number : 3.0
Word : next
Word : token
Word : method
Opmerking: Dit programma zal niet succesvol worden uitgevoerd omdat het bestand 'ABC.txt' niet bestaat. Als we de code op het systeem willen testen, hoeven we alleen maar de bestandsnaam ABC.txt aan te maken.
Maak een bestand ABC.txt met de volgende inhoud, die hieronder wordt vermeld:
1 Dit programma vertelt 2 over het gebruik van de 3 next token()-methode
6. lowerCaseMod(): Voor deze methode is een Booleaanse waarde nodig vlag waarde en controleert of het token automatisch naar kleine letters moet worden omgezet. Als de vlag waar is, worden alle woorden van het token geconverteerd naar kleine letters, anders worden de tokens ingesteld zoals ze zijn en willen ze ze niet converteren.
Syntaxis:
public void lowerCaseMode(booleaanse vlag)
- Parameter: Er is een booleaanse waarde voor nodig vlag waarde. Als het waar is, worden alle tokens omgezet in kleine letters en als het niet waar is, worden ze niet geconverteerd.
- Retourtype: Deze methode levert niets op.
Voorbeeld:
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; } } } }
Uitgang:
Word : hello
Word : geeks
Word : this
Word : is
Word : about
Word : lowercasemode
Opmerking: Dit programma zal niet succesvol worden uitgevoerd omdat het bestand 'ABC.txt' niet bestaat. Als we de code op het systeem willen testen, hoeven we alleen maar de bestandsnaam ABC.txt aan te maken.
Maak een bestand ABC.txt met de volgende inhoud, die hieronder wordt vermeld:
Hallo nerds, dit gaat over LowerCaseMode()
7. gewoneChar(): Deze methode neemt een int-waarde ch moet als een personage worden behandeld. Met deze methode kunnen we a karakter A als speciaal teken, zoals een cijferwoord of witruimte.
Syntaxis:
openbare leegte gewoneChar(int ch)
- Parameter: Voor deze methode is één int nodig ch waarde die als een teken wordt behandeld.
- Retourtype: Deze methode levert niets op.
Voorbeeld:
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; } } } }
Uitgang:
Word : Hello
Word : Geek
Word : Thi
Word : I
Word : zz
Word : About
Word : ordinaryChar
Opmerking: Dit programma zal niet succesvol worden uitgevoerd omdat het bestand 'ABC.txt' niet bestaat. Als we de code op het systeem willen testen, hoeven we alleen maar de bestandsnaam ABC.txt aan te maken.
Maak een bestand ABC.txt met de volgende inhoud, die hieronder wordt vermeld:
Hallo nerds Thissss Issszz Over gewoneChar() Deze methode heeft 's' uit de hele stream verwijderd
8. gewoneChars(): Deze methode specificeert dat alle karakters in het bereik van laag tot hoog (inclusief) zullen worden behandeld als gewone karakters en na het aanroepen van deze methode zullen de karakters niet langer worden behandeld als speciale karakters.
Syntaxis:
publieke leegte gewoneChars(int laag int hoog)
- Parameter: Deze methode gebruikt twee gehele waarden laag En hoog ( inclusief) het bereik van het teken dat wordt omgezet in een speciaal teken.
- Retourtype: Deze methode levert niets op.
Voorbeeld:
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; } } } }
Uitgang:
Word : Hello
Word : Geeks
Word : This
Word : is
Word : out
Word : ordin
Word : ryCh
Word : rs
Opmerking: Dit programma zal niet succesvol worden uitgevoerd omdat het bestand 'ABC.txt' niet bestaat. Als we de code op het systeem willen testen, hoeven we alleen maar de bestandsnaam ABC.txt aan te maken.
Maak een bestand ABC.txt met de volgende inhoud, die hieronder wordt vermeld:
Hallo nerds Dit gaat over gewoneChars()
StreamTokenizer gebruiken om een tekstbestand te tokeniseren
De klasse StreamTokenizer wordt ook gebruikt om het tekstbestand te tokeniseren en hier gebruiken we de methoden van de Tokenizer-klassemethoden.
Stap 1: Maak eerst een tekstbestand met .txt extensie in dezelfde hoofdmap. Hier hebben we het gemaakt met de naam Geeks.txt .
Stap 2: Maak nu een Java-bestand en schrijf de code om de tekstgegevens in het tekstbestand te tokeniseren.
Geeks.java-bestand:
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; } } } }
Uitgang:
Mappenstructuur:
Volgend artikel – Java.io.StreamTokenizer-klasse in Java | Stel 2 in