Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在StringBufferJava中捕获特定文本_Java_Regex_Xml_String_Stringbuffer - Fatal编程技术网

如何在StringBufferJava中捕获特定文本

如何在StringBufferJava中捕获特定文本,java,regex,xml,string,stringbuffer,Java,Regex,Xml,String,Stringbuffer,我有一个包含以下内容的StringBuffer对象: <ET>read input: 1.629ms</ET> <ET>There were 3 errors: <Error> <ErrorId>AllConditionsTrue</ErrorId> <MetaData> <Entry> <Key>Balance Due</Ke

我有一个包含以下内容的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"/>
读取输入:1.629ms
有3个错误:
全脂素
尚欠余额
1500.99
对立面
节点
小型
描述
工资金额
:0.027ms
换算:319.414ms
如何仅捕获错误标记中的文本(
某些文本
)。因此,我的新字符串或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>

全脂素
尚欠余额
1500.99
对立面
节点
小型
描述
工资金额
如何使用Java实现我的目标

编辑

尝试两种解决方案:

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

String errorText = "";

while (m.find()) {
    errorText = m.group(1);
}
Pattern p=Pattern.compile(“*”,Pattern.DOTALL);
Matcher m=p.Matcher(buf.toString());
字符串errorText=“”;
while(m.find()){
errorText=m组(1);
}
我似乎只得到3个错误标记元素,而不是全部3个

例如:

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

小型
描述
工资金额
正则表达式:

<Error>.*?<\/Error>
*?
正则表达式:

<Error>.*?<\/Error>
*?

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

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

检查

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

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

检查

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

它将是便携式的,供您将来参考

请参阅以下sax文档:


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

它将是便携式的,供您将来参考

请参阅以下sax文档:


谢谢,但这个正则表达式似乎只抓取了一个错误标记元素,请参见我对原始的编辑post@arabian_albert检查这个谢谢@Tim007我确实需要阅读regexThanks,但是这个regex似乎只抓取了一个错误标记元素,查看我对原始文件的编辑post@arabian_albert检查此项谢谢@Tim007我现在肯定需要准备regexTrying您的解决方案谢谢,您的解决方案适用于此特定问题。现在这对任何数量的错误标签都有效吗?已更新。请尝试:)您忘记在换行符处加倍\\n。您只有一个\n.@arabian_albert
而(m.find()){System.out.println(m.group(1));}
它可以打印所有3个<代码>错误文本=m.group(1)您将只获得最后一个,另一个是覆盖,因为在循环中,请检查此选项,立即尝试您的解决方案谢谢,您的解决方案适用于此特定问题。现在这对任何数量的错误标签都有效吗?已更新。请尝试:)您忘记在换行符处加倍\\n。您只有一个\n.@arabian_albert
而(m.find()){System.out.println(m.group(1));}
它可以打印所有3个<代码>错误文本=m.group(1)您将只获取最后一个,另一个是覆盖,因为在循环中,请选中此项。请不要使用StringBuffer,因为它在十多年前被StringBuilder替换。请不要使用StringBuffer,因为它在十多年前被StringBuilder替换。