转义java字符串中的%符号以应用string.format
在我的项目(Java/Play framework)中,我有一个错误处理路由,它检查来自web服务的响应。如果响应是错误代码,我们将显示相应的错误消息,说明用户输入有什么问题,服务将检查用户输入的有效性 当用户输入%符号时,此逻辑中断,因为错误显示逻辑使用转义java字符串中的%符号以应用string.format,java,string,string.format,input-sanitization,Java,String,String.format,Input Sanitization,在我的项目(Java/Play framework)中,我有一个错误处理路由,它检查来自web服务的响应。如果响应是错误代码,我们将显示相应的错误消息,说明用户输入有什么问题,服务将检查用户输入的有效性 当用户输入%符号时,此逻辑中断,因为错误显示逻辑使用 String.format(message, messageArgs); 它将messageArgs插入到消息字符串中,在该字符串中找到%,如果messageArgs也包含%,则会出现异常 在显示消息之前,我需要清理、转义或以其他方式从用户
String.format(message, messageArgs);
它将messageArgs插入到消息字符串中,在该字符串中找到%,如果messageArgs也包含%,则会出现异常
在显示消息之前,我需要清理、转义或以其他方式从用户输入中删除%
消息:请求的电子邮件地址%s无效
messageArgs:orlybg%@gmail.com
关于如何在Java中以最简单、最短的方式实现这一点,有什么建议吗
这是错误日志的一部分
java.util.UnknownFormatConversionException: Conversion = 'i'
at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2646)
at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2675)
at java.util.Formatter.parse(Formatter.java:2528)
at java.util.Formatter.format(Formatter.java:2469)
at java.util.Formatter.format(Formatter.java:2423)
at java.lang.String.format(String.java:2797)
at controllers.api.PublicAPI.renderAPIError(PublicAPI.java:176)
at controllers.api.DeviceAPI.setEmailAddress(DeviceAPI.java:736)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
at Invocation.HTTP Request(Play!)
java.util.UnknownFormatConversionException:Conversion='i'
在java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2646)
位于java.util.Formatter$FormattSpecifier(Formatter.java:2675)
位于java.util.Formatter.parse(Formatter.java:2528)
位于java.util.Formatter.format(Formatter.java:2469)
位于java.util.Formatter.format(Formatter.java:2423)
位于java.lang.String.format(String.java:2797)
在controllers.api.PublicAPI.renderapirror(PublicAPI.java:176)
位于controllers.api.DeviceAPI.setEmailAddress(DeviceAPI.java:736)
atplay.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557)
atplay.mvc.ActionInvoker.invoke(ActionInvoker.java:508)
atplay.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
atplay.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479)
atplay.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
在Invocation.HTTP请求时(播放!)
谢谢 如果您收到
java.util.UnknownFormatConversionException:Conversion='i'
您很可能在消息中使用%i
试图格式化整数,这是不正确的。必须使用%d
格式化十进制整数。可以找到完全支持的转换规范。在消息字符串中,%符号用另一个%转义。因此,您需要将其加倍:%%
例如:“Bla Bla%i Bla”->“Bla Bla%%i Bla”
在messageArgs字符串中,%符号没有问题,您不需要转义它当您需要打印字符串时,在格式化程序字符串中使用%%
:
String.format("sendOneSuccessCountRate: %7.2f%%"
,sendOneSuccessCountRate //0.95
);
将为您提供95.00%您能显示错误消息吗?我不认为%
在消息参数中的出现会有任何问题。你能发布一个输入失败的例子吗?准备好了吗?刚刚编辑过帖子如果使用字符串格式我不明白你的意思@archer