我需要從屬性值中提取長度爲f.e的子串。 :
按位置排列的螞蟻子串
<property name="prop1" value="nameBLABLABLA" />
我想要獲取的價值
name
是否有可能不使用JavaScript代碼?
我需要從屬性值中提取長度爲f.e的子串。 :
按位置排列的螞蟻子串
<property name="prop1" value="nameBLABLABLA" />
我想要獲取的價值
name
是否有可能不使用JavaScript代碼?
與香草螞蟻不同,您需要添加一些Ant插件,如
Antcontrib(最新版本2006!)或Ant Flaka - 意味着您需要額外的jar /庫。
選擇使用JDK內置的Javascript引擎是一樣簡單:
<project>
<!-- create a macrodef for reuse -->
<macrodef name="getsubstring">
<attribute name="src"/>
<attribute name="from"/>
<attribute name="to"/>
<attribute name="result"/>
<sequential>
<script language="javascript">
project.setProperty(
"@{result}", "@{src}".substring(@{from},@{to})
);
</script>
</sequential>
</macrodef>
<property name="foo" value="nameBLABLABLA"/>
<getsubstring src="${foo}" from="0" to="4" result="foobar"/>
<echo> $${foobar} => ${foobar}</echo>
</project>
沒有額外的庫需要。
創建一個通用的字符串屬性macrodef。
JavaScript引擎瞭解Javascript和Java,您將獲得對Ant api的完全訪問權限。
我會使用JavaScript作爲在Rebse的答案,但有一種方法可以做到這一點沒有它使用<loadresource>
和<tokenfilter>
。這使用開始/長度而不是從/到子串:
<macrodef name="getsubstring">
<attribute name="src"/>
<attribute name="start"/>
<attribute name="length"/>
<attribute name="result"/>
<sequential>
<loadresource property="@{result}">
<string value="@{src}}" />
<filterchain>
<tokenfilter>
<replaceregex pattern="^.{@{start}}(.{@{length}}).*" replace="\1" />
</tokenfilter>
</filterchain>
</loadresource>
</sequential>
</macrodef>
<property name="prop1" value="nameBLABLABLA" />
<getsubstring src="${prop1}" start="0" length="4" result="p"/>
<echo message="${p}" />
太棒了!適用於我。 –