我使用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但不知何故它不起作用。我是否需要逃脱或采取任何特殊措施来执行此替换?
答案 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"