string - 在groovy中用$替换一个单词

标签 string gradle groovy replace

我从用于替换 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/

相关文章:

gradle - 在gradle中同时使用Application和Distribution插件

string - 在 Julia 中将日期时间转换为系列数字字符串?

c# - 如何检查字符串中的所有条件

ios - NSString stringByReplacingOccurrencesOfString 失败

c - C 中非常简单的密码函数

java - Jar外部的Gradle地方配置文件

java - 使用Gradle构建项目时面临的问题

groovy - 如何通过 Groovy 参数获取 Jenkins 中的当前 session 用户

android-studio - Android Studio:任务 ':buildSrc:compileGroovy'的执行失败

grails - 如何强制 Grails 使用带有 run-app 或 run-war 的签名证书