2016-07-26 15 views
0

Ich habe das folgende Stück groovy Code aus einer gradle Build-Datei Ich bin mit einem Wort in einer PHP-Datei zu ersetzen:

def str1="My application version is $app_version" 
def str2 = str1.replaceAll('$app_version','2016072601') 
println str2​ 

Ich möchte $ APP_VERSION ersetzen definiert Nummer in dieser Methode, aber irgendwie funktioniert es nicht. Muss ich fliehen oder spezielle Maßnahmen ergreifen, um diesen Ersatz durchzuführen?

+0

"Meine Anwendung Version ist $ APP_VERSION" ==> APP_VERSION Hier eine Variable muss. In groovy, wenn Sie '$' vor String mit doppeltem Hochkomma verwenden, wird es als Variable verwendet. –

Antwort

3

Strings mit doppelten Anführungszeichen und $ sind GStrings, die Groovy's string interpolation auslöst. Außerdem erhält replaceAll eine Regex als erstes Argument, und $ ist ein Sonderzeichen in regex, also müssen Sie auch doppelt entkommen.

können Sie einfache Anführungszeichen verwenden, oder Sie können in Ihrem den $ Charakter entkommen str1:

def str1='My application version is $app_version' 
def str2 = str1.replaceAll('\\$app_version','2016072601') 
assert str2 == 'My application version is 2016072601' 

Update: Expanding String Interpolation ein wenig, es ersetzt den $ Platzhalter in der Zeichenfolge mit der Variablenwert des gleichen Namens (wenn auch nicht sofort, da zuerst eine Instanz von GString erstellt wird). Es ist in etwa vergleichbar mit diesem in Java:

String str1 = "My application version is " + app_version; 

Anstatt also die Variable mit replaceAll ersetzen, Sie app_version, wie def app_version = "2016072601" (die eine Variable in Ihrem Skript mit dem Namen sind ein bisschen wie @BZ haben könnten ‚. s Antwort)


Update 2:. von String-Interpolation (per @ BZ Antwort) oder String-Verkettung, brauchen Sie nicht replaceAll zu verwenden, aber Sie müssen eine Variable app_version genannt:

def app_version = '2016072601' 
def str1 = "My application version is $app_version" 
assert str1 == 'My application version is 2016072601' 

Und mit String-Verkettung müssen Sie auch eine Variable app_version genannt:

def app_version = '2016072601' 
def str1 = "My application version is " + app_version 
assert str1 == 'My application version is 2016072601' 
+0

Sorry aber, Will p, können Sie mir bitte sagen, ob app_version eine Variable ist, dann wie können Sie es in einzelnen Hochkomma verwenden. Hier wird es als String verwendet. –

+0

@Omi, ich habe meine Antwort aktualisiert. Lass es mich wissen, wenn es jetzt klarer ist. – Will

+0

Es ist aber gelöscht, Nach Ihrem Update. wird es auch tun. String str1 = "Meine Anwendungsversion ist" + app_version; def str2 = str1.replaceAll (APP_VERSION, '2016072601') assert str2 == Wie pro Ihre vorherige Antwort 'Meine Anwendung Version 2016072601 ist', wenn i Wert von "str1" drucken es wurde mir nicht das tatsächliche Ergebnis gegeben . –

0

Alternativ:

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