繁体   English   中英

Java/Groovy String.Format 如何处理要格式化的字符串中的运行时%

[英]Java/Groovy String.Format How to handle runtime % in the string to be formatted

我面临的问题是,使用 String.format 时,运行时消息有一个百分比字符,然后它出错了。

例如。 在常规中:

def q = "What are your %age?" 
def percent = 91
println formatMessage("Question: ${q} \n Answer: %d", percent)


String formatMessage(String message, Object... messageParams) {
return String.format(message, messageParams)
}

现在,如果消息参数是在运行时通过从具有有效 % 字符的变量插入字符串而准备的,则在调用 formatMessage 时,这会导致 UnknownFormatConversionException

现在,由于 formatMessage 方法在多个地方被调用,我们不希望调用者在调用之前清理消息。

在调用 String.format 之前,有没有办法在 formatMessage 方法中识别和转义 %?

def q = "What are your %age?" 
def percent = 91
println formatMessage("Question: ${q} \n Answer: %d", percent)

@groovy.transform.CompileStatic
String formatMessage(CharSequence message, Object... messageParams) {
    if(message instanceof GString){
        //if message is a GString then build a new one with replaced values
        message=new org.codehaus.groovy.runtime.GStringImpl(
                message.getValues().collect{ it instanceof CharSequence ? it.replaceAll('%','%%') : it } as Object[], 
                message.getStrings()
            )

    }
    return String.format(message as String, messageParams)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM