StreamTokenizer

Status
Nicht offen für weitere Antworten.

Reality

Top Contributor
Hi,
habe ein paar Fragen zu einem Beispielcode.

Code:
import java.io.*;

public class WordCount2 {
public static int words = 0;
public static int lines = 0;
public static int chars = 0;

  public static void wc(Reader r) throws IOException{
    StreamTokenizer tok = new StreamTokenizer(r);

    tok.resetSyntax();
    tok.wordChars(33, 255);
    tok.whitespaceChars(0, ' ');
    tok.eolIsSignificant(true);

    while(tok.nextToken() != tok.TT_EOF){ //TT_EOF Ende des Eingabestroms
      switch(tok.ttype) //Gibt den Typ des gerade gelesenen Zeichen/token an
      {
          case StreamTokenizer.TT_EOL: //Zeilenende
            lines++;
            chars++;
            break;

          case StreamTokenizer.TT_WORD:
            words++;

          default:
            chars += tok.sval.length(); //sval enthät den Wert erkannter Wörter
            break;
      }
    }

  }

  public static void main(String[] args) throws IOException{
    if(args.length == 0){ //Das Programm arbeitet mit stdin
      wc(new InputStreamReader(System.in));
      System.out.println(lines + " " +words + " " + chars);
    }

    else{ //Das Programm arbeitet mit einer Dateiliste
      int twords = 0, tchars = 0, tlines = 0;

      for(int i = 0; i<args.length; i++){

        words = chars = lines = 0;
        wc(new FileReader(args[i]));

        twords += words;
        tchars += chars;
        tlines += lines;

        System.out.print(args[i] + ": " + lines + " " + words + " " + chars);
        System.out.println();
      }
    System.out.println("Gesamt: " + tlines + " "+ twords + " " + tchars);
    }
  }
}

Wenn ich tok.resetSyntax(); lösche, dann ändert sich gar nicht an der Ausgabe. Wozu soll das gut sein?
Mein Buch sagt folgendes:

Mit der Methode resetSyntax() wird die Menge der Standardtrennzeichen zurückgesetzt. Diese Zeichen sind für eine Feinunterteilung von Java-Programmen vorgesehen und daher für dieses Beispiel zu speziell

Also bei meiner File sind auch Zeichen wie : - ) dabei...

Dann bei tok.wordChars(33, 255); Wieso fängt er bei 33 an? Wenn ich 0 als Startwert eingebe, kommt dasselbe raus.

void wordChars(int Start, int Ende)

Mit Start und Ende wird der Bereich gültiger Zeichen angegeben. In diesem Beispiel sind das die Zeichen des Bereichs 33 bis 255

Dann noch das hier:

void whitespaceChars(int Start, int Ende))

Der Bereich nicht sichtbarer Zeichen wird mit Start und Ende eingegrentzt.

Warum schreibt er denn tok.whitespaceChars(0, ' '); Wieso schreibt er ein Leerzeichen? Das wird doch in den ASCII-Code umgewandelt. Was bringt das?

Liebe Grüße
Reality
 

Catscratch1

Mitglied
Mit tok.wordChars(33,255);



Sind im Stream alle Zeichen in der ASCII Tabelle von 33d bis 255d erlaubt. Ich versteh das zwar nicht ganz, weil ich 21d (33h) als Startpunkt vorziehen würde! Ich denke, dass die eigentlich 21d meinen, da bis 21d nur Tasten wie ESC, UP DOWN deklariert sind. Ab 33h (21d) gehts los mit "!".

Mit tok.whitespaceChars(0,' ') wird gesagt, dass alle ASCII Zeichen von 0d bis 21d (33h) als Space weitergegeben werden. 21d (33h) ist ein Space!
 

Reality

Top Contributor
Hi,
danke soweit mal.
Wieso kommt eigentlich eine NullPointerException, wenn ich tok.whitespaceChars(0,' ') lösche?

Liebe Grüße
Reality
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben