我从用于替换 php 文件中的单词的 gradle 构建文件中获得了以下 groovy 代码:
def str1="My application version is $app_version"
def str2 = str1.replaceAll('$app_version','2016072601')
println str2
我想用这个方法中定义的数字替换 $app_version 但不知何故它不起作用。我是否需要逃跑或采取任何特殊行动来执行此替换?
最佳答案
带双引号和 $
的字符串是 GStrings,触发 Groovy's string interpolation .另外, replaceAll
接收一个正则表达式作为第一个参数,并且 $
是正则表达式中的特殊字符,因此,您也需要对其进行双重转义。
您可以使用单引号,也可以转义 $
您的 str1
中的字符:
def str1='My application version is $app_version'
def str2 = str1.replaceAll('\\$app_version','2016072601')
assert str2 == 'My application version is 2016072601'
更新:稍微扩展字符串插值,它替换了
$
字符串中的占位符,具有相同名称的变量值(虽然不是立即,因为它首先创建 GString
的实例)。它与 Java 中的大致类似:String str1 = "My application version is " + app_version;
因此,不要将变量替换为
replaceAll
,您的脚本中可以有一个名为 app_version
的变量,如 def app_version = "2016072601"
(这有点像@BZ。的回答)更新 2:通过使用字符串插值(根据@BZ.'s answer)或字符串连接,您不需要使用
replaceAll
,但您需要一个名为 app_version
的变量:def app_version = '2016072601'
def str1 = "My application version is $app_version"
assert str1 == 'My application version is 2016072601'
通过字符串连接,您还需要一个名为
app_version
的变量。 :def app_version = '2016072601'
def str1 = "My application version is " + app_version
assert str1 == 'My application version is 2016072601'
关于string - 在groovy中用$替换一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38594307/