Hi,
habe ein paar Fragen zu einem Beispielcode.
Wenn ich tok.resetSyntax(); lösche, dann ändert sich gar nicht an der Ausgabe. Wozu soll das gut sein?
Mein Buch sagt folgendes:
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.
Dann noch das hier:
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
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