String Groovy Base32转换

String Groovy Base32转换,string,xcode,groovy,translate,base32,String,Xcode,Groovy,Translate,Base32,目前我无法使用出色的tr(),因为我只能使用Groovy 1.7.1,我想知道是否有一种优雅的方法可以在字符串和数字之间来回移动,使用Base32编码,但值是A到Z,然后是2到7,而不是0到9,然后是A到V 这是为了通过不使用零或一来消除在键入人类可读代码时出现的客户错误 我可以想出72个正则表达式来实现这一点,但当 tr( 'A-Z2-7', 0-9A-V') 非常简单Groovy的美妙之处在于它的动态特性。如果您需要该功能,但它不存在,请添加它!在应用程序方便的入口点的某个地方,或者在需要

目前我无法使用出色的tr(),因为我只能使用Groovy 1.7.1,我想知道是否有一种优雅的方法可以在字符串和数字之间来回移动,使用Base32编码,但值是A到Z,然后是2到7,而不是0到9,然后是A到V

这是为了通过不使用零或一来消除在键入人类可读代码时出现的客户错误

我可以想出72个正则表达式来实现这一点,但当

tr( 'A-Z2-7', 0-9A-V')

非常简单

Groovy的美妙之处在于它的动态特性。如果您需要该功能,但它不存在,请添加它!在应用程序方便的入口点的某个地方,或者在需要它的类中的静态块中,添加直接从1.7.3+源中提取的代码:

String.metaClass.'static'.tr = { String text, String source, String replacement ->
    if (!text || !source) { return text }
    source = expandHyphen(source)
    replacement = expandHyphen(replacement)

    // padding replacement with a last character, if necessary
    replacement = replacement.padRight(source.size(), replacement[replacement.size() - 1])

    return text.collect { original ->
        if (source.contains(original)) {
            replacement[source.lastIndexOf(original)]
        } else {
            original
        }
    }.join()
}


String.metaClass.'static'.expandHyphen = { String text ->
    if (!text.contains('-')) { return text }
    return text.replaceAll(/(.)-(.)/, { all, begin, end -> (begin..end).join() })
}

String.metaClass.tr = { String source, String replacement ->
    String.tr(delegate, source, replacement)
}

这样做的好处是,无论何时升级到1.7.3,您都可以删除此元魔法,而无需更改其他来源。

Delphyne,这证明了为什么更多的头比一个好。我对Groovy还是很陌生,我在Filemaker中使用Groovy,所以我只是从一个角度来看这个问题,当然这只是一种享受。我需要更加熟悉文档和源代码。。非常感谢您的输入。我必须去哪里查看源代码,以便开始扩展我的学习??源代码可与二进制文件一起下载[1]。诀窍在于,弄清楚事情在哪里实现是不明显的。在我上面发布的代码中,静态“tr”和“expandHyphen”方法存在于一个名为StringUtils的类中,而实例“tr”方法存在于DefaultGroovyMethods中。[1]