我在ant属性中有一个以逗号分隔的字符串,如下所示:
<property name="prop" value="a,b,c"/>
我希望能够像这样打印或登录:
Line 1: a
Line 2: b
Line 3: c
听起来不应该太难,但我无法弄清楚我应该把哪些蚂蚁组成。
答案 0 :(得分:9)
您可以使用loadresource将属性值指定为string资源来执行此操作。现在,您可以使用replaceregex过滤器将逗号转换为换行符。
<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
答案 1 :(得分:4)
<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
here的另一个解决方案:
<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 =一个
LINE_1 = B
LINE_2 = C