gpt4 book ai didi

java - StreamTokenizer 行为

转载 作者:行者123 更新时间:2023-12-01 23:04:00 25 4
gpt4 key购买 nike

我正在为实验室开发自己的解析器,并且在使用 StreamTokenizer 时遇到了一些奇怪的行为。似乎任何用单引号括起来的东西都会被跳过。

代码

StreamTokenizer st = new StreamTokenizer(new FileReader("input.txt"));
boolean eof = false;

do{
int i = 0;
int token = st.nextToken();
switch (token){
case StreamTokenizer.TT_EOF:
System.out.println("EOF");
eof = true;
break;
case StreamTokenizer.TT_EOL:
System.out.println("EOL");
break;
case StreamTokenizer.TT_WORD:
System.out.println("Word: " + st.sval);
break;
case StreamTokenizer.TT_NUMBER:
System.out.println("Number: " + st.nval);
break;
default:
System.out.println((char) token + " encountered.");
break;

}
} while (!eof);

输入:

top 'AT THE TOP' {
l 2{ window{Open Up} }
}

输出:

Word: top
' encountered.
{ encountered.
Word: l
Number: 2.0
{ encountered.
Word: window
{ encountered.
Word: Open
Word: Up
} encountered.
} encountered.
} encountered.
EOF

我注意到我可以使用以下方法设置引号字符:

st.quoteChar('\'');

我认为这将允许我设置引号字符,如果遇到,下一个标记将是直到下一个引号字符为止的所有内容。

不幸的是,这并没有像我想象的那样起作用,现在我陷入了困境。

最佳答案

javadoc

public int ttype

For a quoted string token, its value is the quote character.

sval文档说

When the current token is a quoted string token, this field contains the body of the string.

所以你需要有一个

case '\'':
System.out.println("Quoted value is " + st.sval);
break;

或类似于处理单引号字符串或重置语法的东西,这样它就不会将 ' 视为 quoteChar

关于java - StreamTokenizer 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23065434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com