所以,我有这个问题:
#!/usr/bin/env groovy
package com.fsfs.fdfs.fsf.utils
class GlobalVars {
// TEST-DEV
static String MY_URL1 = "https://myurl.com"
static String MY_URL2 = "https://:6443"
static String MYURLS_TEST = "${MY_URL1} ${MY_URL2}"
}
我想根据环境遍历url
例如:在这个ENV是TEST,但可以是DEV, PROD等等
for( Name in GlobalVars."MYURLS_${ENV}".split(/s+/)) {
}
我不知道如何做到这一点。基本上,我想迭代一个具有动态名称的变量。变量至少包含2个字符串
你可以这样做…
class GlobalVars {
// TEST-DEV
static String MY_URL1 = "https://myurl.com"
static String MY_URL2 = "https://:6443"
static String MYURLS_TEST = "${MY_URL1} ${MY_URL2}"
}
String ENV = 'TEST'
for( name in GlobalVars."MYURLS_${ENV}".split(/s+/)) {
println name
}
您可以查看CharacterIterator方法current()以获取当前字符,next()向前移动一个位置。StringCharacterIterator提供了CharacterIterator的实现。
或者对于更简单的任务可以
创建一个while循环来检查字符串的每个索引,或者像这样创建一个for循环
for (int i = 0; i < str.length(); i++) {
// Print current character
System.out.print(str.charAt(i) + " ");
}
在Groovy中迭代字符串:
"bla".each{println it}
。每个{}闭包将遍历字符串的所有字符。
同样可以通过更经典的for循环来实现:
for(c in "foo") println c
两种方法都可以。
我不确定制作一个空格分隔的值列表只是为了再次解析它会有什么好处。使用列表映射似乎更容易。
class GlobalVars {
// TEST-DEV
static String MY_URL1 = 'https://myurl.com'
static String MY_URL2 = 'https://:6443'
static Map MY_URLS = [
'TEST': [
MY_URL1,
MY_URL2,
],
]
}
String ENV = 'TEST'
GlobalVars.MY_URLS[ENV].each {
println it
}
没有正则表达式,没有动态生成的属性名。如果希望避免环境名中的拼写错误,可以将它们放入enum中。