4

我在字符串中有n 个随机标记,我想使用闭包将每个值替换为方法的返回值。

例如

String theString = "嗨,这是\$randomEmail,这是一个随机字符串:\$randomString,这是一个随机\$randomTelephoneNumber"

然后我想做的是根据 roke 调用每个适用的方法,以用实际值替换该字符串 - 例如对于电子邮件地址令牌($randomEmail),然后我想调用以下方法;

String randomEmailAddress() {
        return new StringBuilder(RandomStringUtils.random(6)).append("@").append(RandomStringUtils.random(6)).append(".com").toString();
    }

希望使用闭包字符串替换功能,但在接下来的步骤中有点卡住..

 Map<String,Closure> randomStrings = [randomEmail:{randomEmailAddress()},randomUserName:{randomString(8),randomTelephoneNumber:{randPhoneNumber()}}]

然后在字符串上调用替换函数,并依次将每个标记替换为正确的随机值。

注意:我需要操作许多基本字符串(该示例仅显示其中一个),并且我可能会或可能不会在任何时候拥有文件中存在的所有值(模型)。

我知道我可以用 if 语句来做到这一点,但违背了学习闭包的目的:-)。

提前致谢,

伊恩。

4

1 回答 1

6

您可以使用Groovy 模板

import groovy.text.SimpleTemplateEngine

// single quotes are important here, this needs to be a string, not a gstring.
String template = 'Hi, this is $randomEmail and this is a random username: $randomUserName'

Map model = [
    randomEmail: { -> randomEmailAddress() }, 
    randomUserName: { -> randomUserName() }
]

String result = new SimpleTemplateEngine().createTemplate(template)
    .make(model).toString()
于 2013-07-26T14:26:52.877 回答