2016-06-17 38 views
1

我需要從屬性值中提取長度爲f.e的子串。 :
按位置排列的螞蟻子串

<property name="prop1" value="nameBLABLABLA" /> 

我想要獲取的價值

name 

是否有可能不使用JavaScript代碼?

回答

2

與香草螞蟻不同,您需要添加一些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的完全訪問權限。

1

我會使用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}" /> 
+0

太棒了!適用於我。 –