我有一个逗号分隔的字符串在一个ant属性中,像这样:
<property name="prop" value="a,b,c"/>
我希望能像这样打印或记录它:
Line 1: a
Line 2: b
Line 3: c
听起来不应该太难,但我无法确定应该组合哪些蚂蚁组件。
我有一个逗号分隔的字符串在一个ant属性中,像这样:
<property name="prop" value="a,b,c"/>
Line 1: a
Line 2: b
Line 3: c
听起来不应该太难,但我无法确定应该组合哪些蚂蚁组件。
<project default="test">
<property name="prop" value="a,b,c"/>
<target name="test">
<loadresource property="prop.fmt">
<string value="${prop}"/>
<filterchain>
<tokenfilter>
<replaceregex pattern="," replace="${line.separator}" flags="g"/>
</tokenfilter>
</filterchain>
</loadresource>
<echo message="${prop.fmt}"/>
</target>
</project>
test:
[echo] a
[echo] b
[echo] c
使用Ant-Contrib任务的示例
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
<target name="test_split">
<property name="prop" value="a,b,c"/>
<for list="${prop}" param="letter">
<sequential>
<echo>@{letter}</echo>
</sequential>
</for>
</target>
以下是来自这里的另一个解决方案:a
b
c
<scriptdef name="split" language="javascript">
<attribute name="value"/>
<attribute name="delimiter"/>
<attribute name="prefix"/>
<![CDATA[
values = attributes.get("value").split(attributes.get("delimiter"));
for(i=0; i<values.length; i++) {
project.setNewProperty(attributes.get("prefix")+i, values[i]);
}
]]>
</scriptdef>
<target name="test_split2">
<property name="prop" value="a,b,c"/>
<property name="prefix_str" value="Line_"/>
<split value="${prop}" delimiter="," prefix="${prefix_str}"/>
<echoproperties prefix="${prefix_str}"/>
</target>
此处为输出结果。Ant 属性
2011年11月22日星期二17:12:55
Line_0=a
Line_1=b
Line_2=c
for
解决方案是迄今为止最短和最容易阅读的。 - JesperE