V Javě StreamTokenizer třída je přítomna v balíček java.io . Používá se k analýze vstupního toku jeho rozdělením na malé části známé jako žetony tyto tokeny usnadňují zpracování. Token může být slovo, číslo nebo jakýkoli specifický symbol. Stream Tokenizer dokáže rozpoznat řetězce v uvozovkách čísel a různé styly komentářů.
Vlastnosti třídy StreamTokenizer:
Klíčové vlastnosti třídy StreamTokenizer jsou uvedeny níže:
- Rozdělí vstupní proudy na tokeny, jako jsou symboly, slova a čísla.
- Podporuje sledovací čísla linek.
- Může zacházet se znaky na konci řádku jako se žetony.
- Dokáže také automaticky převést tokeny slov na malá písmena.
Prohlášení o třídě StreamTokenizer
Deklarace třídy StreamTokenizer je:
public class StreamTokenizer rozšiřuje Object implementuje Serializable
Poznámka: Rozšiřuje Object a implementuje Serializable.
Konstruktoři třídy StreamTokenizer
Tato třída se skládá ze dvou konstruktorů, s jejichž pomocí můžeme objekty této třídy vytvářet různými způsoby. V této třídě jsou k dispozici následující konstruktory:
1. StreamTokenizer (InputStream je): Tento konstruktor je zastaralé . Jedná se o starší způsob, jak vytvořit tokenizer přímo z byte streamu.
Syntax:
StreamTokenizer (InputStream je)
Poznámka: To se nedoporučuje, protože to funguje na bajtech, nikoli na znacích.
2. StreamTokenizer (čtečka r): Toto je nejlepší způsob, jak vytvořit tokenizer, který používá proud znaků, který správně zpracovává text.
Syntax:
StreamTokenizer (Reader r)
Příklad:
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); } } } }
Výstup
Word: Hello Number: 123.0
Metody Java StreamTokenizer
Níže uvedená tabulka ukazuje metody této třídy.
| Metoda | Popis |
|---|---|
| komentářChar() | Určuje, že znak ch začíná jednořádkový komentář. Všechny znaky od znaku komentáře po konec řádku jsou ignorovány. |
| čára() | Vrátí aktuální číslo řádku vstupního proudu. |
| toString() | Vrátí řetězcovou reprezentaci aktuálního tokenu proudu a číslo řádku, ve kterém se vyskytuje. |
eolIsSignificant (booleovský příznak) | Určuje, zda jsou znaky konce řádku považovány za významné tokeny. Pokud jsou skutečné znaky konce řádku vráceny jako tokeny. |
| obyčejnýChar(int ch) | Určuje, že se znakem ch se zachází jako s běžným znakem, nikoli jako s číslem slova nebo znakem komentáře. |
| nextToken() | Zanalyzuje další token ze vstupního proudu a vrátí jeho typ. |
| smallCaseMode() | Určuje, zda se tokeny slov automaticky převedou na malá písmena. |
| obyčejnýChar() | Určuje, že se znakem ch se zachází jako s běžným znakem. |
| obyčejné znaky() | Určuje, že se všemi znaky v rozsahu od nízkého do vysokého se zachází jako s běžnými znaky. |
Nyní budeme diskutovat o každé metodě jednu po druhé podrobně:
1. komentářChar(): Tato metoda se používá k určení znaku ch který začíná na jednořádkovém komentáři a všechny znaky od tohoto znaku až po konec řádku StreamTokenizer nerozpozná.
Syntax:
public void commentChar(int ch)
- Parametr: Tato metoda přebírá jednu celočíselnou hodnotu ch poté jsou všechny postavy ignorovány
- Typ vrácení: Tato metoda nic nevrací.
Příklad:
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; } } } }
výstup:
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.
Poznámka: Tento program se nespustí úspěšně, protože soubor 'ABC.txt' neexistuje. Pokud chceme otestovat kód v systému, stačí vytvořit soubor s názvem ABC.txt.
Vytvořte soubor ABC.txt s následujícím obsahem, který je uveden níže:
Programátoři 1 2 3 Geeks Dobrý den, zde je vysvětlen program, přátelé.
2. řádek(): Tato metoda vrací aktuální číslo řádku, které zpracuje StreamTokenizer. Tato metoda je velmi užitečná, když chceme zkontrolovat, jak funguje zpracování, odladit program a také můžeme sledovat čísla řádků v průběhu tokenizace.
Syntax:
veřejné int prádlo()
- Parametr: Tato metoda nebere žádný parametr.
- Typ vrácení: Tato metoda vrací int hodnotu číslo řádku aktuálního vstupního toku.
Příklad:
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; } } } }
výstup:
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(): Tato metoda vrací řetězec, který představuje aktuální token proudu s hodnotou tokenu a číslem řádku, který aktuálně používá.
Syntax:
veřejný řetězec toString()
- Parametr: Tato metoda nebere žádný parametr.
- Typ vrácení: Tato metoda vrací řetězcovou hodnotu představující aktuální token proudu s číslem řádku.
Příklad:
převod int na řetězec v jazyce JavaJava
// 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; } } } }
výstup:
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(): Tato metoda nic nevrací, ale používá se ke kontrole, zda má být znak EOL (End of Line) tokenizován. Pokud je příznak pravdivý, pak se s každým znakem konce řádku zachází jako s tokenem a je mu přiřazen typ tokenu TT_EOL, znak eol je ignorován, je považován za prázdný znak.
Syntax:
public void eolIsSignificant (booleovský příznak)
- Parametr: Tato metoda bere booleovskou hodnotu vlajka pokud je to pravda, pak se znak konce řádku považuje za token nebo se ignoruje jako mezera.
- Typ vrácení: Tato metoda nic nevrací.
Příklad:
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; } } } }
výstup:
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
Poznámka: Tento program se nespustí úspěšně, protože soubor 'ABC.txt' neexistuje. Pokud chceme otestovat kód v systému, stačí vytvořit soubor s názvem ABC.txt.
Vytvořte soubor ABC.txxt s následujícím obsahem, který je uveden níže:
1 geekové 2 pro 3 geeky
5. nextToken(): Tato metoda načte další token ze vstupního proudu a vrátí typ. Typ tokenu je uložen v ttype pole. Vrací typ jako celočíselnou hodnotu, která může být TT_WORD TT_NUMBER a TT_EOL atd.
Syntax:
public int nextToken()
- Parametr: Tato metoda nebere žádný parametr.
- Typ vrácení: Tato metoda vrací int hodnotu typu tokenu.
Příklad:
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; } } } }
výstup:
Word : This
Word : program
Word : tells
Number : 2.0
Word : about
Word : use
Word : of
Number : 3.0
Word : next
Word : token
Word : method
Poznámka: Tento program se nespustí úspěšně, protože soubor 'ABC.txt' neexistuje. Pokud chceme otestovat kód v systému, stačí vytvořit soubor s názvem ABC.txt.
Vytvořte soubor ABC.txt s následujícím obsahem, který je uveden níže:
1 Tento program informuje 2 o použití metody 3 next token().
6. smallCaseMod(): Tato metoda bere booleovskou hodnotu vlajka hodnotu a zkontroluje, zda má být token automaticky převeden na malá písmena. Pokud je příznak pravdivý, pak se všechna slova tokenu převedou na malá písmena, jinak jsou tokeny nastaveny tak, jak jsou, a nechtějí je převádět.
Syntax:
public void smallCaseMode (booleovský příznak)
- Parametr: Chce to boolean vlajka hodnota. Pokud je to pravda, všechny tokeny se převedou na malá písmena a pokud je nepravda, nebudou převedeny.
- Typ vrácení: Tato metoda nic nevrací.
Příklad:
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; } } } }
výstup:
Word : hello
Word : geeks
Word : this
Word : is
Word : about
Word : lowercasemode
Poznámka: Tento program se nespustí úspěšně, protože soubor 'ABC.txt' neexistuje. Pokud chceme otestovat kód v systému, stačí vytvořit soubor s názvem ABC.txt.
Vytvořte soubor ABC.txt s následujícím obsahem, který je uveden níže:
Ahoj Geekové, tohle je o LowerCaseMode()
7. obyčejnýChar(): Tato metoda má hodnotu int ch by se mělo zacházet jako s postavou. Pomocí této metody můžeme léčit a charakter A jako speciální znak, jako je číselné slovo nebo mezera.
Syntax:
public void obyčejnýChar(int ch)
- Parametr: Tato metoda trvá jeden int ch hodnota, která bude považována za znak.
- Typ vrácení: Tato metoda nic nevrací.
Příklad:
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; } } } }
výstup:
Word : Hello
Word : Geek
Word : Thi
Word : I
Word : zz
Word : About
Word : ordinaryChar
Poznámka: Tento program se nespustí úspěšně, protože soubor 'ABC.txt' neexistuje. Pokud chceme otestovat kód v systému, stačí vytvořit soubor s názvem ABC.txt.
Vytvořte soubor ABC.txt s následujícím obsahem, který je uveden níže:
Hello Geeks Thissss Issszz O obyčejnémChar() Tato metoda odstranila 's' z celého streamu
8. obyčejné znaky(): Tato metoda určuje, že se všemi znaky v rozsahu od nízké po vysokou (včetně) bude zacházeno jako s běžnými znaky a po volání této metody se se znaky již nebude zacházet jako se speciálními znaky.
Syntax:
public void běžné znaky (int low int high)
- Parametr: Tato metoda přijímá dvě celočíselné hodnoty nízký a vysoká ( včetně) rozsah znaku, který je převeden na speciální znak.
- Typ vrácení: Tato metoda nic nevrací.
Příklad:
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; } } } }
výstup:
Word : Hello
Word : Geeks
Word : This
Word : is
Word : out
Word : ordin
Word : ryCh
Word : rs
Poznámka: Tento program se nespustí úspěšně, protože soubor 'ABC.txt' neexistuje. Pokud chceme otestovat kód v systému, stačí vytvořit soubor s názvem ABC.txt.
rozevírací seznam javascript
Vytvořte soubor ABC.txt s následujícím obsahem, který je uveden níže:
Hello Geeks Tohle je o obyčejných Chars()
Použití StreamTokenizer k tokenizaci textového souboru
Třída StreamTokenizer se také používá k tokenizaci textového souboru a zde používáme metody metod třídy Tokenizer.
Krok 1: Nejprve vytvořte textový soubor s .txt rozšíření ve stejném kořenovém adresáři. Zde jsme jej vytvořili s názvem Geeks.txt .
Krok 2: Nyní vytvořte soubor Java a napište kód pro tokenizaci textových dat přítomných v textovém souboru.
Soubor 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; } } } }
výstup:
Struktura složky:
Další článek – Třída Java.io.StreamTokenizer v jazyce Java | Sada 2