用groovy替换$中的单词

时间:2016-07-26 15:38:44

标签: string gradle groovy replace

我使用gradle构建文件中的以下一段groovy代码,用于替换php文件中的单词:

public partial class GoogleMaterialIcon : UserControl
{
    /// <summary>
    /// Dependency Property used to back the <see cref="Icon"/> Property
    /// </summary>
    public static readonly DependencyProperty IconProperty =
        DependencyProperty.Register("Icon",
            typeof(Icon),
            typeof(GoogleMaterialIcon),
            new PropertyMetadata(null));


    /// <summary>
    /// Constructor
    /// </summary>
    public GoogleMaterialIcon()
    {
        InitializeComponent();
    }

    /// <summary>
    /// Select a predefined icon to use 
    /// </summary>
    public Icon Icon
    {
        get { return (Icon)GetValue(IconProperty); }
        set
        {
            SetValue(IconProperty, value);
        }
    }
}

我想在此方法中用定义的数字替换$ app_version但不知何故它不起作用。我是否需要逃脱或采取任何特殊措施来执行此替换?

2 个答案:

答案 0 :(得分:4)

带双引号和$的字符串是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'

更新:稍微扩展字符串插值,它会使用相同名称的变量值替换字符串中的$占位符(但不会立即替换,因为它会创建{的实例{1}}首先)。它与Java大致类似:

GString

所以,不是用String str1 = "My application version is " + app_version; 替换变量,而是在脚本中有一个名为replaceAll的变量,如app_version(有点像@BZ。&# 39;回答)

更新2:通过使用字符串插值(根据@BZ。答案)或字符串连接,您不需要使用def app_version = "2016072601",但是你需要一个名为replaceAll的变量:

app_version

使用字符串连接,您还需要一个名为def app_version = '2016072601' def str1 = "My application version is $app_version" assert str1 == 'My application version is 2016072601' 的变量:

app_version

答案 1 :(得分:0)

可替换地:

def versionString = "2016072601"
def string2 = "My application version is $versionString"