【问题标题】:Substring of a string based on condition基于条件的字符串的子字符串
【发布时间】:2015-02-26 08:47:00
【问题描述】:

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

<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>

要求:

如果字符串值与 'event_code="CP"' 匹配,则我需要返回 &lt;textmessage&gt; ---- &lt;/textmessage&gt; 之间的完整数据,如下所示。

<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>

【问题讨论】:

标签: java substring string-utils


【解决方案1】:

这些的组合可能会有所帮助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)

如果它们在同一个位置,那么只需从那里读取就足够了..

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-06
      • 2018-08-05
      • 1970-01-01
      • 2020-07-09
      • 2017-02-15
      • 1970-01-01
      • 2015-06-08
      • 2018-07-22
      • 2016-03-23
      相关资源
      最近更新 更多