现有下面的字符串片段,要将其中的 java-class="java.lang.Double"部分全都去掉,当然在整个字符串中class是有很多类型的。大家可以试下不看后面这个该怎么弄
- <FApieceAmt java-class="java.lang.Double">1.0</FApieceAmt>
- <FApieceClmDay java-class="java.lang.Integer">2</FApieceClmDay>
- <FBasicPrm java-class="java.lang.Double">3.0</FBasicPrm>
- <FNclmAmt java-class="java.lang.Double">4.0</FNclmAmt>
- <FNrdrPrmVar java-class="java.lang.Double">5.0</FNrdrPrmVar>
- <FPrmCoef java-class="java.lang.Double">6.0</FPrmCoef>
- <FRate java-class="java.lang.Double">7.0</FRate>
- <FRdrAmt java-class="java.lang.Double">8.0</FRdrAmt>
- <FRdrAmtVar java-class="java.lang.Double">9.0</FRdrAmtVar>
- <FRdrDis java-class="java.lang.Double">10.0</FRdrDis>
- <FRdrDisAmt java-class="java.lang.Double">11.0</FRdrDisAmt>
- <FRdrNclm java-class="java.lang.Double">13.0</FRdrNclm>
- <FRdrNclmAmt java-class="java.lang.Double">14.0</FRdrNclmAmt>
- <FRdrPerAmt>16</FRdrPerAmt>
- <FRdrPrm java-class="java.lang.Double">17.0</FRdrPrm>
- <FRdrPrmVar java-class="java.lang.Double">18.0</FRdrPrmVar>
- <FRdrdisPrm java-class="java.lang.Double">12.0</FRdrdisPrm>
- <FRdrnclmProp java-class="java.lang.Double">15.0</FRdrnclmProp>
- <FSeatdayNum java-class="java.lang.Double">19.0</FSeatdayNum>
首先想到的是用java中的正则表达式来进行替换,开始使用“^ java-class>$”来匹配,发现没有效果,然后开javaApi才知道^、$使用来匹配行的开始和结束的,根本就不是针对某个子字符串的。
其实很简单,用下面的regex就可以了
- Pattern p=Pattern.compile(" java-class([^>]+)>");
弄这东西花了不少时间,主要原因还是老是想着进行边界定义,开始用^、$,接着还用/A、/b、/B,唉,本来就不需要边界定义的东西(子串中的匹配),到最后才看穿。
试验的过程中发现了一个javaapi的小知识点。String对象的replace方法是不会按照正则表达式来解析给出的要匹配的字符串,按正则表达式解析的是replaceAll()
要获取字符串"2009-09-10"中的月份信息如果使用[^/-]*/-作为匹配的话讲会出错,因为这样的话09-也会作为是一种匹配,只能用[^/-]{4}/-作为表达式