如何在StringBufferJava中捕获特定文本
我有一个包含以下内容的StringBuffer对象:如何在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
<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替换。