gpt4 book ai didi

java - 如何获取 StreamTokenizer 中的行偏移量?

转载 作者:行者123 更新时间:2023-12-01 09:47:18 25 4
gpt4 key购买 nike

我正在为我的类开发一个解析器,它使用 StreamTokenizer java 中的类。在出现解析错误的情况下,我希望能够打印发生错误的标记开始的字符的确切行和偏移量。然而,虽然StreamTokenizer有一个lineno()方法来查找分词器位于哪一行,但没有方法来查找该行内的字符偏移量。

我希望有一种方法可以使用 StreamTokenizer 中的可用函数来获取此偏移量。或BufferedReader ,输入StreamTokenizer构造函数。

到目前为止,我尝试过使用这样的东西:

BufferedReader dataReader = new BufferedReader(new FileReader(filename));
StreamTokenizer st = new StreamTokenizer(dataReader);
st.eolIsSignificant(true);

然后,我在周围做了一个包装

 StreamTokenizer.nextToken()

函数,使其看起来像这样:

 public int nextTokenSpec(StreamTokenizer st) throws IOException{
int token = st.nextToken();

if (token == StreamTokenizer.TT_EOL){
Linker2.offsetCounter = 0;
token = st.nextToken();
} else{
Linker2.offsetCounter += st.sval.length();
}
return token;
}

请注意Linker2是一个驱动程序类,包含调用上述代码( BufferedReaderStreamTokenizer )的主函数。

但是,这样做的问题是它忽略了 token 分隔符,因为它仅根据 token 的长度递增。

我怀疑可能有某种方法可以直接转到BufferedReader获取有关此的信息,但我不确定。

有谁知道如何获得 StreamTokenizer 的精确行偏移量功能?

最佳答案

简短的回答是,您无法使用StringTokenizer获得准确的行/字符偏移量。您需要使用不同的机制进行标记化。

I suspect there may be some way to go directly to the BufferedReader to get info on this, but I am not sure.

这不能可靠地工作。 StringTokenizer 需要提前读取(尝试)找到当前标记的末尾或下一个标记(如果您调用 hasMoreTokens())。读取器中记录的位置是预读的“高水位线”,而不是 token 的开始。

关于java - 如何获取 StreamTokenizer 中的行偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37891735/

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