我正在尝试建立两个“;”的对称差异我的ant文件中的分隔列表。但它不起作用,我认为可能是因为String.split(“;”)的结果似乎是一个字符串,而不是一个数组。 (如println(a1)所示。结果是:[Ljava.lang.String; @ 6395e579)。
查看代码:
<scriptdef language="javascript" name="diffLists">
<attribute name="list1" />
<attribute name="list2" />
<attribute name="target" />
<![CDATA[
function symmetricDifference(str1, str2) {
var a1 = str1.split(";");
println(Array.isArray(a1));
println(a1);
var a2 = str2.split(";");
var result = [];
for (var i = 0; i < a1.length; i++) {
if (a2.indexOf(a1[i]) == -1) {
result.push(a1[i]);
}
}
for (i = 0; i < a2.length; i++) {
if (a1.indexOf(a2[i]) == -1) {
result.push(a2[i]);
}
}
return result;
}
project.setProperty(attributes.get("target"),symmetricDifference(attributes.get("list1"),attributes.get("list2")).join(";"));
]]>
</scriptdef>
<target name="init">
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="${basedir}/lib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
</target>
<target name="checkDiff" depends="init">
<var name="fileOld.list" value="a.txt;b.txt" />
<var name="file.list" value="b.txt;c.txt" />
<diffLists list1="${fileOld.list}" list2="${file.list}" target="diffList" />
<echo message="DIFF: ${diffList}" />
</target>
应该返回:a.txt; c.txt 但它返回:a.txt; b.txt; b.txt; c.txt
如果重要的话,我正在使用2013年7月8日编译的Apache Ant(TM)1.9.2版。
感谢您的帮助!