【发布时间】:2013-02-12 17:16:53
【问题描述】:
我正在尝试解析具有特定模式的字符串。一个有效的字符串示例如下:
<STX><DATA><ETX>
<STX>A?123<ETX>
<STX><DATA><ETX>
<STX>name!xyz<ETX>
<STX>age!27y<ETX>
<STX></DATA><ETX>
<STX>A?234<ETX>
<STX><DATA><ETX>
<STX>name!abc<ETX>
<STX>age!24y<ETX>
<STX></DATA><ETX>
<STX>A?345<ETX>
<STX><DATA><ETX>
<STX>name!bac<ETX>
<STX>age!22y<ETX>
<STX></DATA><ETX>
<STX>OK<ETX>
<STX></DATA><ETX>
此数据由设备发送。我只需要使用 id:123 name:xyz, age 27y 解析这个字符串。
我正在尝试使用这个正则表达式:
最终模式正则表达式 = Pattern.compile("(.*?)", Pattern.DOTALL);
这确实输出了所需的数据:
<ETX>
<STX>A?123<ETX>
<STX><DATA><ETX>
<STX>name!xyz<ETX>
<STX>age!27y<ETX>
<STX>
如何递归循环字符串以将所有内容复制到字符串列表中。 我正在尝试循环并删除提取的模式,但它不会删除。
final Pattern regex = Pattern.compile("<DATA>(.*?)</DATA>", Pattern.DOTALL);// Q?(.*?)
final StringBuffer buff = new StringBuffer(frame);
final Matcher matcher = regex.matcher(buff);
while (matcher.find())
{
final String dataElements = matcher.group();
System.out.println("Data:" + dataElements);
}
}
有没有更好的方法来做到这一点。
这是我目前得到的输出:
Data:<DATA><ETX><STX>A?123<ETX><STX><DATA><ETX><STX>name!xyz<ETX><STX>age!27y<ETX><STX> </DATA>
Data:<DATA><ETX><STX>name!abc<ETX><STX>age!24y<ETX><STX></DATA>
Data:<DATA><ETX><STX>name!bac<ETX><STX>age!22y<ETX><STX></DATA>
在接下来的两场比赛中,我错过了 A?234 和 A?345。
【问题讨论】:
-
PACK ??..你想用那个字符串做什么..你的问题不清楚..
-
应用于您提供的字符串的模式
(.*?)怎么会返回这样的输出?这个真的不清楚。尝试应用SSCCE 概念。 -
我正在尝试解析该字符串....并获取相应的值,例如 id: 123, Name: xyz , age: 27y。对于所有可用的数据块。
-
同意您粘贴的代码和示例中有一些可疑之处。但无论如何,没有必要从缓冲区中删除,甚至没有缓冲区。只需创建
regex.matcher(frame)然后在循环时将 dateElements 收集到 Collection中。 -
我也尝试过这样做。它只找到第一个,然后找不到其他的。