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:
Post a Comment