关于StreamTokenizer的错误?
import java.io.*;public class Token
{
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(
new FileReader("person.txt"));
BufferedWriter bw = new BufferedWriter(
new FileWriter("token.txt"));
StreamTokenizer st =new StreamTokenizer(br);
int tokenType;
st.whitespaceChars(0,32);
st.eolIsSignificant(true);
while (br.ready())
{
tokenType = st.nextToken();
switch(tokenType)
{
case st.TT_NUMBER:
{
bw.write(String.valueOf((long)st.nval));
bw.newLine();
break;
}
case st.TT_WORD:
{
bw.write(st.sval);
bw.newLine();
break;
}
default:
;
}
}
bw.close();
}
}
这是我的程序,为什么总是报“需要常量表达式 case st.TT_NUMBER”错误,请知道的指点一下!!
----------------解决方案--------------------------------------------------------
case后面的值必须是常量
明白么.?
它都已经提醒你了
st.TT_NUMBER要是final的才可以放到case里面
----------------解决方案--------------------------------------------------------
那么怎么改呢?
----------------解决方案--------------------------------------------------------
声明为final或者直接在case后面写数字就可以了
----------------解决方案--------------------------------------------------------
我就是不知道如何把br.TT_NUMBER声明为final啊!
----------------解决方案--------------------------------------------------------
那br.TT_NUMBER的值是多少
你直接写它的值就可以了
比如br.TT_NUMBER=5;
那case 5
----------------解决方案--------------------------------------------------------
我无法确定br.TT_NUMBER的值是多少,只是
说如果读入数字就做什么,如果读入字符就
做什么,这个程序是我从书上抄来的源程序!
----------------解决方案--------------------------------------------------------
这是不允许的
除非你用if else来代替switch
----------------解决方案--------------------------------------------------------
我试过了,但是用if else的话,只能读取一行的内容,我不知道为什么?
----------------解决方案--------------------------------------------------------
怎么会呢?
while (br.ready())
{
tokenType = st.nextToken();
if(tokenType==st.TT_NUMBER)
{
bw.write(String.valueOf((long)st.nval));
bw.newLine();
break;
}
else if(tokeyType==st.TT_WORD)
{
bw.write(st.sval);
bw.newLine();
break;
}
}
改成这样试试看
----------------解决方案--------------------------------------------------------