>>920
StringTokenizerの使い方を間違えてるよ。
countTokens()は、その時点で残ってるトークンの数を表す。
したがって、1回目のループが終了した時点でcountTokens()が返す値は1だ。
それに対してiは1回目のループが終了するとインクリメントされて1になっている。
だから、2回目のループの最初でi<st.countTokens()は1<1だからfalseになってループは終了する。
書くとすれば、
int n = st.countTokens();
for (int i = 0; i < n; i++) {
st.nextToken()を使った処理
}
のように書くべき。

個人的には、StringTokenizerのAPIリファレンスにあるように
while (st.hasMoreTokens()) {
st.nextToken()を使った処理
}
の方が好きだが、そこらへんは個人の趣味か。
というか、StringTokenizerなんてずいぶん前から使わなくなったな。