基于条件的字符串的子串

时间:2015-02-26 08:47:00

标签: java substring string-utils

我有一个如下所示的字符串(从文件中读取并存储在字符串中)

<textmessages>
<textMessage timestamp="1424708212905">
<property name="tcs_car_kind" value="M32"/>
<property name="prev_cmdy_abrv" value="AUTOS"/>
<text><![CDATA[event_code="AP"]]></text>
</textMessage>
<textMessage timestamp="1424708212902">
<property name="shp_prim" value=""/>
<property name="prev_cmdy_abrv" value="AUTOS"/>
<text><![CDATA[event_code="CP"]]></text>
</textMessage>
<textMessage timestamp="1424708212902">
<property name="co_part_frm_nbr" value=""/>
<property name="prev_cmdy_abrv" value="AUTOS"/>
<text><![CDATA[event_code="LP"]]></text>
</textMessage>
</textmessages>

要求:

如果字符串值与&#39; event_code =&#34; CP&#34;&#39;匹配然后我需要在<textmessage> ---- </textmessage>之间返回完整数据,如下所示。

<textMessage timestamp="1424708212902">
<property name="co_part_frm_nbr" value=""/>
<property name="shp_prim" value=""/>
<property name="prev_cmdy_abrv" value="AUTOS"/>
<text><![CDATA[event_code="CP"]]></text>
</textMessage>

2 个答案:

答案 0 :(得分:0)

这些的组合可能会有所帮助http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html

搜索'event_code =“CP” 与find()或match() 如果有...

Pattern p = Pattern.compile("pattern here"); if(p.matcher(content).find()){...}

其他选项是使用xml解析,但正则表达式非常简单。

如果模式真的不变,你甚至可以使用indexOf来加快你的搜索... http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(java.lang.String)

如果他们在同一个地方,那么只需从那里读书就足够了..

答案 1 :(得分:0)

为什么不尝试使用DOM将该String解析为XML? 有了这个你只需要比较每个“文本”节点的值,如果它的值匹配,你返回整个父节点,例如String ...

以下是DOM如何在Java中工作的基本示例:http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/