如何在 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>
请注意,您的字符串包含新行,因此您必须使用 \n
。试试这个:
<Error>((?:.*?\n?)+.*?)<\/Error>
勾选Regex101
SaxParse 是比字符串解析器更好的解决方案。
它也将便于您将来参考。
请参阅此 sax 文档:
http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/SAXParser.html
我有一个包含以下内容的 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>
请注意,您的字符串包含新行,因此您必须使用 \n
。试试这个:
<Error>((?:.*?\n?)+.*?)<\/Error>
勾选Regex101
SaxParse 是比字符串解析器更好的解决方案。
它也将便于您将来参考。
请参阅此 sax 文档:
http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/SAXParser.html