Utilizarea claselor StringTokenizer si StreamTokenizer

Biblioteca Java.uitl defineste clasa StringTokenizer care faciliteaza separarea unui sir de caractere in simboluri. Pentru a separa un sir de caractere, trebuie sa cream un obiect StringTokenizer, specificand sirul si caracterul special, utilizat de sir pentru a indica(delimita componenetele). Constructorii acestei clase sunt:

    StringTokenizer(String str, String delim, boolean returnSimbol)
    StringTokenizer(String str, String delim)
    StringTokenizer(String str)

Parametrul str specifica sirul de caractere pe care doriti sa il separati in simboluri. Parametrul delim specifica o lista de caractere de delimitare. De exemplu, un argument delim "!?" indica faptul ca delimitatorii sunt semnul exclamarii si semnul intrebarii. In mod implicit, clasa StringTokenizer stabileste ca delimitator caracterele "\t\n\r" care corespund unui spatiu de tabulare, unui caracater de linie noua si unui caractere retur de car. Parametrul returnSimbol arata daca doriti sau nu ca delimitatorul sa fie returnat. Implicit, metoda nu returneaza delimitatorul ca simbol.

Parcurgerea unei liste de simboluri

Extragerea fiecarui simbol se face utilizand metoda nextToken:

String nextToken()

Pentru a afla daca obiectul StringTokenizer contine mai multe simboluri se poate apela metoda hasMoreTokens:

boolean hasMoreTokens()

In cazul in care dorim sa determinam numarul de simboluri pe care le contine obiectul StringTokenizer se poate apela metoda countTokens:

int countTokens()

Clasa StreamTokenizer parcurge un flux de intrare de orice tip si îl împarte în "atomi lexicali". Rezultatul va consta în faptul ca în loc sa se citeasca octeti sau caractere se vor citi, pe rând, atomii lexicali ai fluxului respectiv. Printr-un atom lexical se în]elege în general:

  • un identificator (un sir care nu este între ghilimele)
  • un numar
  • un sir de caractere
  • un comentariu
  • un separator

Atomii lexicali sunt despartiti între ei de separatori. Implicit acesti separatori sunt cei obisnuti( spatiu, tab, virgula, punct si virgula), însa pot fi schimbati prin diverse metode ale clasei.

Constructorii acestei clase sunt:

    public StreamTokenizer( Reader r )
    public StreamTokenizer( InputStream is )

Identificarea tipului si valorii unui atom lexical se face prin intermediul variabilelor:

  • TT_EOF - atom ce marcheaz sfârsitul fluxului
  • TT_EOL - atom ce marcheaz sfârsitul unei linii
  • TT_NUMBER - atom de tip numar
  • TT_WORD - atom de tip cuvânt nval - valoarea unui atom numeric sval - sirul continut de un atom de tip cuvânt
  • ttype - tipul ultimului atom citit din flux

Ca si-n cazul clasei StringTokenizer, citirea atomilor din flux se face cu metoda nextToken(), care returneza tipul atomului lexical citit si scrie în variabilele nval sau sval valoarea corespunzatoare atomului.

Exemplu:

//Citirea unei secvente de numere si siruri

public class TestTokenizer {
    public static void main(String args[]) throws IOException
    {
    FileInputStream fis = new FileInputStream("test.dat");
    BufferedReader br = new BufferedReader(new InputStreamReader(fis));
    StreamTokenizer st = new StreamTokenizer(br);
    int tip = st.nextToken(); //citesc primul atom lexical
    while (tip != StreamTokenizer.TT_EOF)
    {
        switch (tip)
        {
            case StreamTokenizer.TT_WORD : //cuvant
                System.out.println(st.sval);
                break;
            case StreamTokenizer.TT_NUMBER : //numar
                System.out.println(st.nval);
        }
        tip = st.nextToken();//urmatorul atom
    }
    }
}

Share on


Echipa conspecte.com, crede cu adevărat că studenții care studiază devin următoarea generație de aventurieri și lideri cu gândire globală - și dorim ca cât mai mulți dintre voi să o facă!