regex - 常规正则表达式测试失败

在我的Grails 1.3.6应用程序中,我编写了此类

import org.apache.commons.lang.StringUtils

/**
 * Implementation that converts a name such as <tt>FOO_BAR</tt> to <tt>fooBar</tt>
 */
@Singleton
class CamelCaseEnumTransformer implements EnumTransformer {

    String transformName(Enum e) {

        String transformedName = e.name().toLowerCase()

        transformedName.replaceAll(/_([a-z])/) {
            it[1].toUpperCase()
        }
        StringUtils.remove(transformedName, '_')
    }
}

我创建了这个测试用例:
class EnumTransformerTests extends GroovyTestCase {

    private static enum TestEnum {
        A, FOO, FOO_BAR, FOO_BAR_123,
    }

    void testCamelCaseTransformer() {
        EnumTransformer transformer = CamelCaseEnumTransformer.instance
        assertEquals 'a', transformer.transformName(TestEnum.A)
        assertEquals 'foo', transformer.transformName(TestEnum.FOO)

        // This test fails on the line below
        assertEquals 'fooBar', transformer.transformName(TestEnum.FOO_BAR)
    }
}

测试在上面标记的行上失败。我认为这个问题必须与replaceAll方法有关,因为这是第一次执行闭包作为该方法的第二个参数传递。

我得到的错误是:
groovy.lang.MissingMethodException: No signature of method: 
CamelCaseEnumTransformer$_transformName_closure1.doCall() 
is applicable for argument types: (java.lang.String, java.lang.String) values: [_b, b]

尤其奇怪的是,如果我在Groovy控制台中运行下面的等效代码,一切似乎都可以正常工作。
@Singleton
class CamelCaseEnumTransformer {

    String transformName(Enum e) {

        String transformedName = e.name().toLowerCase()

        transformedName.replaceAll(/_([a-z])/) {
            it[1].toUpperCase()
        }
    }
}

enum TestEnum {
    A, FOO, FOO_BAR, FOO_BAR_123,
}

def transformer = CamelCaseEnumTransformer.instance
assert 'fooBar' == transformer.transformName(TestEnum.FOO_BAR)

最佳答案

从错误消息文本看来,闭包应该为您的正则表达式中的2个匹配项接受2个参数。请尝试以下操作:

    transformedName.replaceAll(/_([a-z])/) { wholeMatch, capturedGroups ->
        capturedGroups[0].toUpperCase();
    }

https://stackoverflow.com/questions/6761280/

相关文章:

spring - Grails 2.0 注入(inject) bean 并在 Controller

hibernate - Grails域创建关联表

hibernate - Grails中的事务提交事件处理程序

grails - 如果URL不包含额外路径,如何显示身份验证页面?

grails - 带有枚举的Grails JSON单元格

grails - Grails:当我重新编译文件时(使用数据源时)服务器崩溃

javascript - Grails和Javascript

javascript - 使用Node.js从客户端向服务器发送json请求

grails - Grails版本差异

json - Grails模型和子模型的JSON响应(一对多)