groovy 遍历字符串

zqdjd7g9  于 2023-01-25  发布在  其他
关注(0)|答案(4)|浏览(181)

所以,我有这个问题:

#!/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个字符串

zsohkypk

zsohkypk1#

你可以这样做...

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
}
mrfwxfqh

mrfwxfqh2#

可以使用CharacterIterator方法current()获取当前字符,使用next()向前移动一个位置。StringCharacterIterator提供了CharacterIterator的实现。
或者对于较简单的任务可以
创建一个while循环来检查字符串的每个索引,或者创建一个for循环,如下所示

for (int i = 0; i < str.length(); i++) {
 
            // Print current character
            System.out.print(str.charAt(i) + " ");
        }
zzzyeukh

zzzyeukh3#

在Groovy中,迭代字符串是开箱即用的:

"bla".each{println it}

.每个{}闭包将遍历字符串的所有字符。
用一个更经典的for循环也可以达到同样的效果:

for(c in "foo") println c

两种方法都行。

nszi6y05

nszi6y054#

我不确定创建一个用空格分隔的值列表来再次解析它有什么好处。使用列表Map似乎更容易。

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
}

没有正则表达式,没有动态生成的属性名称。如果你想避免环境名称中的拼写错误,你可以把它们放到一个枚举中。

相关问题