StreamTokenizer を使用した非常に単純なトークナイザーがあります。これは、数式を個々のコンポーネントに変換します (以下)。私が抱えている問題は、式に T_1 という変数がある場合、[T,_,1] に分割され、[T_1] として返したいということです。
変数を使用して最後の文字がアンダースコアであるかどうかを確認しようとしました。そうであれば、リストにアンダースコアを追加します.Size-1ですが、非常に扱いにくく非効率的なソリューションのようです。これを行う方法はありますか?ありがとう!
StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(s));
tokenizer.ordinaryChar('-'); // Don't parse minus as part of numbers.
tokenizer.ordinaryChar('/'); // Don't parse slash as part of numbers.
List<String> tokBuf = new ArrayList<String>();
while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) //While not the end of file
{
switch (tokenizer.ttype) //Switch based on the type of token
{
case StreamTokenizer.TT_NUMBER: //Number
tokBuf.add(String.valueOf(tokenizer.nval));
break;
case StreamTokenizer.TT_WORD: //Word
tokBuf.add(tokenizer.sval);
break;
case '_':
tokBuf.add(tokBuf.size()-1, tokenizer.sval);
break;
default: //Operator
tokBuf.add(String.valueOf((char) tokenizer.ttype));
}
}
return tokBuf;