gpt4 book ai didi

java - Sax解析器不完全读取一行

转载 作者:行者123 更新时间:2023-11-29 10:03:48 26 4
gpt4 key购买 nike

我正在尝试解析一个模拟- InkML文档。每个内容的节点都有更多的元组(以逗号分隔)和 6 或 7 数字(负数和小数)。

在测试中,我发现 SAX 的方法character 没有记住所有数据。

代码:

    public class PenParser extends DefaultHandler {

//code useless

public void characters(char ch[], int start, int length) throws SAXException {
//begin my debug print
StringBuilder buffer=new StringBuilder ();
for(int i=start;i<length;i++){
buffer.append(ch[i]);
}
System.out.println(">"+buffer);
//end my debug print

在调试中,我看到 buffer 不包含感兴趣标签的所有数字,但它只包含前 107 个(或多或少)char标记的内容(我的行不再是 4610 个字符):很奇怪 StringBufferSAX 解析的 char 在我的意见。

我也用过StringBuilder,但问题依旧。

有什么建议吗?

最佳答案

是的 - 这很明显。解析一个节点时可能会多次调用字符。

你必须使用StringBuilder作为成员,附加字符中的内容并处理endElement中的内容。

已编辑

顺便说一句。您不需要逐个字符地构建缓冲区 -这是我对字符的实现(我一直在使用)

    @Override
public void characters(char[] ch, int start, int length) throws SAXException
{
characters.append(new String(ch,start,length));
}

...并且不要忘记...

    @Override
public void endElement(String uri, String localName, String qName)
throws SAXException
{
final String content = characters.toString().trim();
// .... deal with content
// reset characters
characters.setLength(0);
}

private final StringBuilder characters = new StringBuilder(64);

关于java - Sax解析器不完全读取一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14850076/

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