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

问题描述 投票:0回答:1

我面临的问题是,使用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方法中标识和转义%?

java string groovy format string.format
1个回答
0
投票
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)
}

© www.soinside.com 2019 - 2024. All rights reserved.