如何在 StringBuffer Java 中捕获特定文本

How to capture certain text within a StringBuffer Java

我有一个包含以下内容的 StringBuffer 对象:

<ET>read input: 1.629ms</ET>
<ET>There were 3 errors:
<Error>
    <ErrorId>AllConditionsTrue</ErrorId>
    <MetaData>
        <Entry>
            <Key>Balance Due</Key>
            <Value>1500.99</Value>
        </Entry>
    </MetaData>
</Error>

<Error>
    <ErrorId>Opposite</ErrorId>
    <MetaData>
        <Entry>
            <Key>Node</Key>
        </Entry>
    </MetaData>
</Error>

<Error>
    <ErrorId>minInclusive</ErrorId>
    <MetaData>
        <Entry>
            <Key>Description</Key>
            <Value>Wages Amount</Value>
        </Entry>
    </MetaData>
</Error>

: 0.027ms</ET>
<ET>convert: 319.414ms</ET>
<FORM id="123"/>
<DATA size="11920"/>
<ERROR code="0"/>

我怎样才能只捕获错误标记处和错误标记内的文本(<Error> 一些文本 </Error> )。所以我的新 String 或 StringBuffer 对象包含:

<Error>
    <ErrorId>AllConditionsTrue</ErrorId>
    <MetaData>
        <Entry>
            <Key>Balance Due</Key>
            <Value>1500.99</Value>
        </Entry>
    </MetaData>
</Error>

<Error>
    <ErrorId>Opposite</ErrorId>
    <MetaData>
        <Entry>
            <Key>Node</Key>
        </Entry>
    </MetaData>
</Error>

<Error>
    <ErrorId>minInclusive</ErrorId>
    <MetaData>
        <Entry>
            <Key>Description</Key>
            <Value>Wages Amount</Value>
        </Entry>
    </MetaData>
</Error>

如何使用 Java 实现我的目标?

编辑

正在尝试你们两个解决方案:

Pattern p = Pattern.compile("<Error>.*?<\/Error>", Pattern.DOTALL);
Matcher m = p.matcher(buf.toString());

String errorText = "";

while (m.find()) {
    errorText = m.group(1);
}

我似乎只得到 3 个错误标记元素,而不是全部 3 个。

示例:

<Error>
    <ErrorId>minInclusive</ErrorId>
    <MetaData>
        <Entry>
            <Key>Description</Key>
            <Value>Wages Amount</Value>
        </Entry>
    </MetaData>
</Error>

正则表达式:

<Error>.*?<\/Error>

Demo

请注意,您的字符串包含新行,因此您必须使用 \n。试试这个:

<Error>((?:.*?\n?)+.*?)<\/Error>

勾选Regex101

SaxParse 是比字符串解析器更好的解决方案。

它也将便于您将来参考。

请参阅此 sax 文档:

http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/SAXParser.html