StreamTokenizer遇斜杠停止解析的原因与解决方案
问题原因与解决方法
这问题我之前排查过,核心是StreamTokenizer的默认规则在搞事情!
为什么会只输出第一个单词?
StreamTokenizer默认把斜杠/当作注释起始标记:
- 当它遇到单个
/后,会自动将后续直到行尾的内容判定为注释,直接跳过不解析 - 所以你输入
Hello /this is a string时,解析到/就触发了注释规则,后面的this is a string全被当成注释忽略了,自然只输出Word: Hello
怎么解决?
我们需要手动修改StreamTokenizer的规则,把斜杠从注释符号列表里移除,让它被当作普通字符处理。有两种常用方式:
方式1:关闭所有斜杠相关的注释规则
在创建StreamTokenizer实例后,添加这两行代码:
StreamTokenizer st = new StreamTokenizer(br); // 关闭双斜杠//注释 st.slashSlashComments(false); // 关闭斜杠星号/* */注释 st.slashStarComments(false);
方式2:直接将斜杠设为普通字符
如果只需要让单个/不触发注释,也可以直接把它标记为普通字符:
StreamTokenizer st = new StreamTokenizer(br); // 将/设置为普通字符,不再作为注释起始符 st.ordinaryChar('/');
修改后再解析Hello /this is a string,就能正常输出所有内容了:
Word: Hello Word: /this Word: is Word: a Word: string
内容的提问来源于stack exchange,提问作者mrfr
相关产品推荐
相关产品推荐

