是否有一种简单的方法来获取属性的值,然后将其复制到另一个属性,并替换某些字符?
说propA=This is a value.我想将其中的所有空格替换为下划线,从而产生propB=This_is_a_value.
Uwe*_*ler 101
这是没有脚本的解决方案,也没有像ant-conrib这样的外部jar:
诀窍是使用ANT的资源:
<loadresource property="propB">
<propertyresource name="propA"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<replacestring from=" " to="_"/>
</tokenfilter>
</filterchain>
</loadresource>
Run Code Online (Sandbox Code Playgroud)
这个将用"_"替换propA中的所有"",并将结果放在propB中."filetokenizer"将整个输入流(我们的属性)视为一个标记,并在其上应用字符串替换.
您可以使用其他令牌过滤器进行其他奇特的转换:http://ant.apache.org/manual/Types/filterchain.html
Jon*_*eet 87
使用Ant Contrib中的propertyregex任务.
我想你想要:
<propertyregex property="propB"
input="${propA}"
regexp=" "
replace="_"
global="true" />
Run Code Online (Sandbox Code Playgroud)
不幸的是,给出的例子并不十分清楚,但值得尝试.您还应该检查如果没有任何下划线会发生什么 - 您可能也需要使用该defaultValue选项.
dna*_*ult 55
如果ant-contrib不是一个选项,这里是Java 1.6及更高版本的可移植解决方案:
<property name="before" value="This is a value"/>
<script language="javascript">
var before = project.getProperty("before");
project.setProperty("after", before.replaceAll(" ", "_"));
</script>
<echo>after=${after}</echo>
Run Code Online (Sandbox Code Playgroud)
mga*_*ert 26
如果您想要一个仅使用Ant内置插件的解决方案,请考虑以下事项:
<target name="replace-spaces">
<property name="propA" value="This is a value" />
<echo message="${propA}" file="some.tmp.file" />
<loadfile property="propB" srcFile="some.tmp.file">
<filterchain>
<tokenfilter>
<replaceregex pattern=" " replace="_" flags="g"/>
</tokenfilter>
</filterchain>
</loadfile>
<echo message="$${propB} = "${propB}"" />
</target>
Run Code Online (Sandbox Code Playgroud)
输出是 ${propB} = "This_is_a_value"
使用像sed这样的外部应用程序:
<exec executable="sed" inputstring="${wersja}" outputproperty="wersjaDot">
<arg value="s/_/./g"/>
</exec>
<echo>${wersjaDot}</echo>
Run Code Online (Sandbox Code Playgroud)
如果您运行Windows,请使用Google搜索"gnuwin32 sed".
该命令s/_/./g取代了每一个_与.
windows下这个脚本顺利.在linux下arg可能需要引用.
两种可能性:
通过脚本任务和内置的JavaScript引擎(如果使用jdk> = 1.6)
<project>
<property name="propA" value="This is a value"/>
<script language="javascript">
project.setProperty('propB', project.getProperty('propA').
replace(" ", "_"));
</script>
<echo>$${propB} => ${propB}</echo>
</project>
Run Code Online (Sandbox Code Playgroud)
或使用Ant插件Flaka
<project xmlns:fl="antlib:it.haefelinger.flaka">
<property name="propA" value="This is a value"/>
<fl:let> propB := replace('${propA}', '_', ' ')</fl:let>
<echo>$${propB} => ${propB}</echo>
</project>
Run Code Online (Sandbox Code Playgroud)
覆盖现有属性propA只需用propA替换propB
这是Uwe Schindler的答案的更一般化的版本:
您可以使用macrodef创建自定义任务。
<macrodef name="replaceproperty" taskname="@{taskname}">
<attribute name="src" />
<attribute name="dest" default="" />
<attribute name="replace" default="" />
<attribute name="with" default="" />
<sequential>
<loadresource property="@{dest}">
<propertyresource name="@{src}" />
<filterchain>
<tokenfilter>
<filetokenizer/>
<replacestring from="@{replace}" to="@{with}"/>
</tokenfilter>
</filterchain>
</loadresource>
</sequential>
</macrodef>
Run Code Online (Sandbox Code Playgroud)
您可以按以下方式使用它:
<replaceproperty src="property1" dest="property2" replace=" " with="_"/>
Run Code Online (Sandbox Code Playgroud)
如果您多次这样做,这将非常有用
| 归档时间: |
|
| 查看次数: |
94764 次 |
| 最近记录: |