Monday, 30 August 2010

JavaのTokenizer

自分で書き始めたときに、何故か、Matcher を使おうと考えたらしく、

  Pattern pattern = Pattern.compile("([_a-zA-Z][\\@\\w]*)");
  CharBuffer cb = CharBuffer.wrap(exp);
  Matcher scan = pattern.matcher(cb);
  Boolean match = scan.usePattern(pattern).lookingAt();
  String s = scan.group(1);
  cb.position(cb.position()+scan.end());

とか、やってました。これが、CharBufferにファイルから読み込んで再matchとか、いろいろ楽しいんです。で、Java 6 で、Matcher.group(int) がバグって、

  s = cb.toString().substring(scan.start(1),scan.end(1));

とか、やっていたりして。ま、遅いけど別に問題無し。

まぁ、Tokenizer は易しいので、自分で、CharBuffer 上で1文字ずつループで切り取っていくのが簡単なんだけどさ。その方が速くて早くて易い。

なんだが、

  java.io.StreamTokenizer
  http://www5b.biglobe.ne.jp/~psoft/lesson/StreamTokenizer.html

なるものを今日発見。なんだよ〜 Javaのclassで、Token 探すぐらいしなかったのか。そんなものがあるなら、それを使ったのに。きっと、Java のCompilerもこれを使っているに違いない。

もっとも、微妙に仕様が違っていて使えないってのがありそうだけど。

No comments: